传递Select Query的列名以从临时表中检索

时间:2015-02-09 13:45:07

标签: sql sql-server sql-server-2008-r2

我有一个临时表,其中包含我想从特定表(表A)中检索的列名。

以下是示例代码:

Declare @temp table (ColumnNames varchar(30))

insert into @temp 
values('Name'), ('Class'), ('School')

--select Query to retrieve only name,class and School columns
end

此处表A包含10列以上

2 个答案:

答案 0 :(得分:1)

以下代码执行您的要求:

Declare @temp table (ColumnNames varchar(30))

insert into @temp 
values('Id'), ('Name')

DECLARE @ColumnNames nvarchar(max)

SELECT @ColumnNames = stuff((SELECT ',' + ColumnNames 
FROM @temp
FOR XML PATH('')), 1,1, '')

EXEC (N'SELECT ' + @ColumnNames + N' FROM TheTable')

但事情根本就是错误的。为什么在地球上你需要在表变量中存储列名,然后读取它以构建sql语句?

答案 1 :(得分:0)

DECLARE @SQLTOEXECUTE VARCHAR(MAX),
           @Col VARCHAR(200)

DECLARE CURSOR curs FOR 
SELECT ColumnNames FROM @temp

SET @SQLTOEXECUTE = 'SELECT '

OPEN curs
FETCH NEXT FROM Curs
INTO @Col

WHILE @@FETCH_STATUS = 0 
BEGIN
   SET @SQLTOEXECUTE = @SQLTOEXECUTE + @Col + ', '

   FETCH NEXT FROM Curs
   INTO @Col
END

CLOSE curs
DEALLOCATE curs

SET @SQLTOEXECUTE = ' FROM <Table name goes here>' 
PRINT @SQLTOEXECUTE

这应该让你去