【发布时间】:2018-07-03 11:54:06
【问题描述】:
我有一个列号未知的最终临时表 (#tempTable)。 我的最终选择是这样的,它可以工作:
SELECT temp.* FROM #tempTable temp
但我想单独调用每一列而不是“*”:
SELECT temp.col1, temp.col2 FROM #tempTable temp
为此,我需要遍历列名并创建一个过程,我尝试了这样的方法:
DECLARE @ColName VARCHAR(255)
SELECT @ColName = min(name) FROM tempdb.sys.columns
WHERE object_id = Object_id('tempdb..#TEMPTABLE');
WHILE @ColName is not null
BEGIN
-- i need to do it all in once and not each time....
declare @sql varchar(max) = 'SELECT tp.'+'@COlName'+'FROM #TEMPTABLE tp'
exec(@sql)
-- Increment the value, how to go to next column ?
select @ColName = min(name) FROM tempdb.sys.columns WHERE object_id =
Object_id('tempdb..#TEMPTABLE') > @ColName -- does not work because it is a string (column name)
END
【问题讨论】:
-
在这种情况下,
SELECT *究竟有什么问题?如果您想返回所有列,并且您不知道这些列是什么,那么在这种情况下,我建议SELECT *是允许的。 -
为什么不
SELECT *? -
我被要求不要使用 SELECT *... 来查看请求中的列名。
标签: sql sql-server procedure dynamic-columns