ホテル管理システム
ogi
yesterday 1a1c8e71fcd14858f595029f089b2d4a00202b32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
-- ***********************************************************************
-- PROCEDURE NAME : SP_GetCreateTableScript
-- Description    : ƒe[ƒuƒ‹‚̐¶¬‚r‚p‚k‚̎擾 
-- ***********************************************************************
CREATE PROCEDURE SP_GetCreateTableScript
    @v_tableName varchar(256),
    @IdentityOn int = 1       --identity€–Ú‚ª‚ ‚Á‚½‚çAidentity‚Őݒ肷‚é‚©‚Ç‚¤‚©
AS
BEGIN  
    DECLARE @i_objectId int,
            @i_indId smallint,   --Index id  
            @v_pkInfo varchar(500),   
            @v_clusteredInfo varchar(20),
            @v_pkCol varchar(500),
            @v_key varchar(50),
            @i_i smallint;
            
    SET @i_objectId = object_id(@v_tableName);  
    IF @i_objectId is null RETURN;  
    IF OBJECTPROPERTY(@i_objectId, 'IsTable ') <> 1 RETURN;
    
    CREATE TABLE #CreateTableScript(i_id int identity,v_desc varchar(1000));
    
    INSERT INTO #CreateTableScript(v_desc) VALUES('CREATE TABLE ['+ @v_tableName + '](');
 
    INSERT INTO #CreateTableScript(v_desc)
    SELECT SPACE(4) + '[' + a.name + ']' + SPACE(1) + '[' + b.name +  ']' + 
        CASE WHEN b.xtype in(167,175,231,239) THEN '('+ case when a.prec = -1 then 'max' else CAST(a.prec  as varchar) end + ') '  
             WHEN b.xtype in(106,108) THEN '('+ CAST(a.xprec as varchar) + ','+ CAST(a.xscale as varchar)+ ') '  --¬”‚ ‚é
             ELSE ' '
        END 
        + SPACE(1) +  
        CASE WHEN (a.colstat & 1 = 1) AND @IdentityOn = 1
             THEN 'IDENTITY('+ CAST(ident_seed(@v_tableName) as varchar)+ ',' +  
                               CAST(ident_incr(@v_tableName) as varchar)+ ') '   
             ELSE ' '
        END
        + CASE a.isnullable WHEN 0 THEN 'NOT NULL' ELSE 'NULL' END + '|'  
    FROM syscolumns a,systypes b  
    WHERE a.id = @i_objectId AND a.xtype = b.xusertype  
    ORDER BY a.colid; 
 
    IF EXISTS(SELECT 1 FROM sysobjects WHERE parent_obj = @i_objectId AND xtype = 'PK')
    BEGIN  
        SELECT @v_pkInfo=b.name,@i_indId=indid,
               @v_clusteredInfo = (CASE WHEN (a.status & 16)=16 THEN 'CLUSTERED' ELSE 'NONCLUSTERED' END)  
        FROM sysindexes a,sysobjects b  
        WHERE a.id=b.parent_obj AND a.name=b.name AND b.xtype='PK' AND b.parent_obj=@i_objectId;
        
        SELECT @v_pkCol =  '[' + index_col(@v_tableName,@i_indId,1) + ']';  --PrimaryKey‚̈ê”Ԗڂ̍€–ڎ擾
        
        --‘¼‚ÌPrimaryKey‚̍€–ڎ擾
        SET @i_i = 2;
        SELECT @v_key = index_col(@v_tableName,@i_indId,@i_i);
        WHILE (@v_key IS NOT NULL)  
        BEGIN  
            SELECT @v_pkCol = @v_pkCol + ',[' + @v_key + ']', @i_i = @i_i + 1;  
            SELECT @v_key = index_col(@v_tableName, @i_indId, @i_i);
        END
        
        SET @v_pkInfo = ' CONSTRAINT ['+@v_pkInfo+ '] PRIMARY KEY '+ @v_clusteredInfo + ' ('+ @v_pkCol + ') ';  
        INSERT INTO #CreateTableScript(v_desc) VALUES(@v_pkInfo);   --   ›’ŽåŒ®M‘§‡“ü—ÕŽž•\  
    END
    ELSE
    BEGIN  
        SELECT @i_i = COUNT(-1) FROM #CreateTableScript;
        UPDATE #CreateTableScript SET v_desc = replace(v_desc, '|', ' ') WHERE i_id = @i_i;
    END
 
    INSERT INTO #CreateTableScript(v_desc) values( ')');
    UPDATE #CreateTableScript SET v_desc = replace(v_desc, '|', ',');
    SELECT v_desc FROM #CreateTableScript ORDER BY i_id;  
    DROP TABLE #CreateTableScript
END