遍历临时表列以选择它们

时间:2018-07-03 11:54:07

标签: sql sql-server procedure dynamic-columns

我有一个最终的临时表(#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

2 个答案:

答案 0 :(得分:1)

尝试一下:

DECLARE @ColName VARCHAR(2000) = 'select '
SELECT @ColName = @ColName + ' temp.' + name + ',' FROM tempdb.sys.columns
            WHERE  object_id = Object_id('tempdb..#TEMPTABLE')
--delete last character, which is comma and append table name
@ColName = substring(@ColName, 1, LEN(@ColName) - 1) + ' from #TEMPTABLE temp'

exec(@ColName)

此查询构造在select ... from ...语句中组合的整个表列表。我增加了varchar变量的大小,因此它可以适应较长的查询。

此外,诸如@sql@query之类的IMO变量名称将更有意义。

答案 1 :(得分:1)

基于集合的方法

$('.more, .wd').on('click', function(event) {
  event.stopPropagation();
});