我有一个表被设计为具有与我需要引用它的值相同的列。我知道如果我手动输入所有列名称,我需要取消对表的设置并使其工作,但是这个表不断添加新列,因此我想捕获unpivot中的所有列而不是手动编写脚本。 / p>
我可以使用column_name函数获取列名,并且想知道是否可以将它添加到unpivot中,我一直在玩它并且它现在看起来不可能,所以想到id检查看看是否还有其他建议。
可悲的是,我无法重新设计表格,以及列名称的添加位置,尽管这将是理想的解决方案。
select Day, Rota, RotaTemplate
from table1 t1
unpivot
(
Rota
for RotaTemplate in (select Column_name
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'table1')
) unpiv;
答案 0 :(得分:0)
您不能这样做。您需要构建动态SQL语句,如下所示:
DECLARE @DynamicSQL NVARCHAR(MAX)
SET @DynamicSQL = N'select Day, Rota, RotaTemplate' + CHAR(10) +
'from table1 t1'+ CHAR(10) +
'unpivot' + CHAR(10) +
'(' + CHAR(10) + CHAR(9) +
'Rota for RotaTemplate in ('
+
STUFF
(
(
SELECT ',[' + [COLUMN_NAME] + '] '
FROM [INFORMATION_SCHEMA].[COLUMNS]
WHERE [TABLE_NAME] = 'table1'
FOR XML PATH('')
)
,1
,1
,''
)
+')' + CHAR(10) +
') unpiv;'
EXEC sp_executesql @DynamicSQL