簡體   English   中英

傳遞選擇查詢的列名以從臨時表中檢索

[英]Pass Column names for a Select Query to retrieve from temporary table

我有一個臨時表,其中包含要從特定表(表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列以上

以下代碼完成了您所要求的:

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語句?

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

這應該讓你走

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM