![](/img/trans.png)
[英]How to add Dynamic column in sql server which is select column name from declare Variable
[英]It is possible to declare a constant in SQL Server which provides the column name?
我想問你是否可以在SQL Server中聲明一個提供列名的常量?
意思是這樣的:
declare @column varchar(30)
set @column = 'Column1'
SELECT @column FROM Table1
我知道上面的聲明是錯誤的,但也許是為自己提供列名的解決方案。
我想顯示Column1
結果,但如果Column1
在''內,那么將返回(No column name)
附加列名,所有行的結果將是Column1
。
謝謝
您不能在SQL中使用動態列名稱。
為此,您需要使用動態SQL。 我建議閱讀Erland Sommarskog 的動態SQL的詛咒和祝福,以獲得關於這個問題的完整觀點 - 文章很長但很全面。
使用動態SQL可以向您公開SQL注入 ,因此請謹慎使用。
為此你需要使用動態查詢,如果你使用slq服務器可以使用sp_execute exeucte
DECLARE @SQLString nvarchar(1000)
declare @column varchar(30)
set @column = 'Column1'
SET @SQLString = 'SELECT ' + @column + ' in Table1 '
EXECUTE sp_executesql @SQLString
總之,不,你不能那樣做。 你需要使用動態sql。
使用動態SQL 。
代碼將是這樣的:
DECLARE @sqlCommand nvarchar(1000)
DECLARE @column varchar(75)
SET @column = 'Column1'
SET @sqlCommand = 'SELECT ' + @column + ' from Table1'
EXECUTE sp_executesql @sqlCommand, N'@column nvarchar(75)', @column = @column
有關sp_executesql的更多信息,請檢查此信息 。
就像@Oded所說,使用這種類型的解決方案可以進行SQL注入!
declare @query varchar(100)
set @query = 'select Column1 from table1'
exec (@query)
正如你自己所說,上述聲明是不正確的。 但是您可以將整個查詢存儲為動態sql並使用Exec()
運行它。
對於你的情況,它將是:
declare @column varchar(30)
set @column = 'Column1'
declare @sqlSelect varchar(500)
set @sqlSelect = 'SELECT ' + @column + ' in Table1'
Exec( @sqlSelect )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.