ホテル管理システム
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
-- ***********************************************************************
-- PROCEDURE NAME   :   GetTableDefine
-- PARAMETER        :   @tableName      
-- Description      :   ƒe[ƒuƒ‹’è‹`î•ñ
-- ***********************************************************************
CREATE PROCEDURE [dbo].[GetTableDefine]
    @tableName varchar(500)
AS
BEGIN
    SET NOCOUNT ON;
 
    DECLARE @PKData TABLE(Col varchar(500));
    DECLARE @objectId int,@indId smallint,@pkCol varchar(500),@key varchar(500),@i smallint;
 
    SET @objectId = object_id(@tableName);  
 
    --pkˆê——
    IF EXISTS(SELECT 1 FROM sysobjects WHERE parent_obj = @objectId AND xtype = 'PK')
    BEGIN  
        SELECT @indId=indid
        FROM sysindexes a,sysobjects b  
        WHERE a.id=b.parent_obj AND a.name=b.name AND b.xtype='PK' AND b.parent_obj=@objectId;
        
        INSERT INTO @PKData(Col) SELECT index_col(@tableName,@indId,1);  --PrimaryKey‚̈ê”Ԗڂ̍€–ڎ擾
        
        --‘¼‚ÌPrimaryKey‚̍€–ڎ擾
        SET @i = 2;
        SET @key = index_col(@tableName,@indId,@i);
        WHILE (@key IS NOT NULL)  
        BEGIN
            INSERT INTO @PKData(Col) SELECT @key;
            SET @i = @i + 1;  
            SET @key = index_col(@tableName,@indId,@i);
        END     
    END
 
    --Œ‹‰Ê
    SELECT a.name AS [Name],'[' + 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 AS DataType,
        CASE WHEN c.Col IS NULL THEN 0 ELSE 1 END AS IsPrimaryKey,
        d.value AS [Description]
    FROM syscolumns a
    INNER JOIN systypes b ON a.xtype = b.xusertype  
    LEFT JOIN @PKData c ON a.name = c.Col
    LEFT JOIN sys.extended_properties d on d.major_id = a.id and d.name = N'MS_Description' and d.[minor_id] = a.colid
    WHERE a.id = @objectId 
    ORDER BY a.colid; 
 
    SET NOCOUNT OFF;
END