Sql 使用column_name函数取消打印表

Sql 使用column_name函数取消打印表,sql,sql-server,pivot,unpivot,Sql,Sql Server,Pivot,Unpivot,我有一个表,它的列名称与我需要引用的值相同。我知道,如果我手动键入所有列名,我需要取消Pivot表并使其工作,但是此表不断向其中添加新列,因此我希望捕获取消Pivot中的所有列,而不是手动编写脚本 我可以使用column_name函数获取列名,我想知道这是否可以添加到unpivot中,我一直在玩它,现在看起来不可能,所以我想检查一下是否有其他建议 遗憾的是,我无法重新设计不断添加列名的表,尽管这是理想的解决方案 select Day, Rota, RotaTemplate from table1

我有一个表,它的列名称与我需要引用的值相同。我知道,如果我手动键入所有列名,我需要取消Pivot表并使其工作,但是此表不断向其中添加新列,因此我希望捕获取消Pivot中的所有列,而不是手动编写脚本

我可以使用column_name函数获取列名,我想知道这是否可以添加到unpivot中,我一直在玩它,现在看起来不可能,所以我想检查一下是否有其他建议

遗憾的是,我无法重新设计不断添加列名的表,尽管这是理想的解决方案

select Day, Rota, RotaTemplate
from table1 t1
unpivot
(
  Rota
  for RotaTemplate in (select Column_name
                        from INFORMATION_SCHEMA.COLUMNS
                        where TABLE_NAME = 'table1')
) unpiv;

你不允许这样做。您需要构建动态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

感谢您的回复,我尝试了您的代码,我在Day列上遇到了一个错误。列“Day”的类型与UNPIVOT列表中指定的其他列的类型冲突。事实上,我发现了这个错误是由于我拉出的Day列是表中的一列,所以我刚刚在where子句中过滤掉了它,谢谢你的帮助