1

最初の図のように結果セットを返す次のスクリプトがあります。

脚本:

use your_db_name

declare @tblname nvarchar(max)

set @tblname = 'stockm' --use a table in your database 


SELECT
 col.column_id
,col.name
,typ.name[type]
,col.max_length
,def.definition

FROM sys.tables tab
INNER JOIN sys.columns col
ON tab.object_id = col.object_id

INNER JOIN sys.default_constraints def
ON col.default_object_id = def.object_id

INNER JOIN sys.types typ
ON col.system_type_id = typ.system_type_id

WHERE (tab.name like @tblname)

ORDER BY col.column_id

結果セット:

この結果セットを選択したテーブルに応じて、長さの変更をピボットしたいと考えています。ここでは上位 10 行のみを示しましたが、この特定の結果セットは 192 行です

column_id      
    name            type    max_length  definition    

1   warehouse       char     2          (' ')
2   product         char    20          (' ')
3   alpha           char    10          (' ')
4   description     char    20          (' ')
5   supersession    char    22          (' ')
6   supsession_date datetime 8          (CONVERT([datetime],'31/12/1899',(103)))
7   alternatives01  char    22          (' ')
8   alternatives02  char    22          (' ')
9   alternatives03  char    22          (' ')
10  value           float    8          ((0))

結果をピボットして反映させたい

1           2       ..... 10        to n'th column_id       
warehouse   product ..... value     to n'th name
char        char    ..... float     to n'th type
20          10      ..... 8         to n'th max_length
(' ')       (' ')   ..... ((0))     to n'th definition

これは私が持っているスクリプトです。かなり近いですが、最後のセクションで何かを見逃していました ( set @query)

脚本:

    declare @cols AS NVARCHAR(MAX),
        @query AS  NVARCHAR(MAX),
        @tblname nvarchar(MAX)

set @tblname = 'stockm' 

SELECT @cols = STUFF((
                    SELECT  ',' + QUOTENAME(col.column_id) 
                    FROM
                    (SELECT DISTINCT col.column_id FROM sys.tables tab
                    INNER JOIN sys.columns col
                    ON tab.object_id = col.object_id
                    WHERE (tab.name like @tblname)) col
                    ORDER BY col.column_id
        FOR XML PATH(''), TYPE).value('.','NVARCHAR(MAX)'),1,1,'')

set @query =
'SELECT ' + @cols + ' 
    FROM(       
        SELECT
         col.column_id
        ,col.name
        ,typ.name[type]
        ,col.max_length
        ,def.definition

        FROM sys.tables tab
        INNER JOIN sys.columns col
        ON tab.object_id = col.object_id

        INNER JOIN sys.default_constraints def
        ON col.default_object_id = def.object_id

        INNER JOIN sys.types typ
        ON col.system_type_id = typ.system_type_id

        WHERE tab.name like ''' + @tblname +''') x

        PIVOT

        (
        max(column_id) 
        for column_id in (' + @cols + ')
        ) p'


         ) p 

print (@query)

execute (@query)

ご支援いただければ幸いです。

4

0 に答える 0