檢索我有一個包含我想從特定的表(表一)檢索列名的臨時表。的選擇查詢傳遞列名從臨時表
這裏的示例代碼:
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列
檢索我有一個包含我想從特定的表(表一)檢索列名的臨時表。的選擇查詢傳遞列名從臨時表
這裏的示例代碼:
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列
下面的代碼做了你問什麼:
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語句?
感謝您的回答...,工作正常。我正在處理它,因爲用戶選擇他喜歡在GUI中看到的列名稱,這就是我正在處理它的原因。 – Venki 2015-02-09 15:04:36
還有更好的選擇,例如在客戶端建立sql語句。在XML參數等中傳遞columnNames – 2015-02-09 15:07:19
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
這應該讓你去
你基本上必須使用動態SQL來構建一個你想要的'select'的字符串。然後你可以使用'sp_executesql'來執行它。 – 2015-02-09 13:45:53
即使我只會在Store程序中使用它。需要一些代碼才能繼續。 – Venki 2015-02-09 13:47:21