最初の図のように結果セットを返す次のスクリプトがあります。
脚本:
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)
ご支援いただければ幸いです。