2015-02-09 56 views
0

檢索我有一個包含我想從特定的表(表一)檢索列名的臨時表。的選擇查詢傳遞列名從臨時表

這裏的示例代碼:

Declare @temp table (ColumnNames varchar(30)) 

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

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

這裏表一個包含超過10列

+1

你基本上必須使用動態SQL來構建一個你想要的'select'的字符串。然後你可以使用'sp_executesql'來執行它。 – 2015-02-09 13:45:53

+0

即使我只會在Store程序中使用它。需要一些代碼才能繼續。 – Venki 2015-02-09 13:47:21

回答

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

+0

感謝您的回答...,工作正常。我正在處理它,因爲用戶選擇他喜歡在GUI中看到的列名稱,這就是我正在處理它的原因。 – Venki 2015-02-09 15:04:36

+0

還有更好的選擇,例如在客戶端建立sql語句。在XML參數等中傳遞columnNames – 2015-02-09 15:07:19

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 

這應該讓你去