回答
它知道什麼之前的@a的價值是你不能這樣做,因爲SQL編譯(我假設在現實中你會希望@a是一些參數並不像你的例子那樣硬編碼)。
相反,你可以這樣做:
declare @a as varchar;
set @a='TEST'
declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'
exec sp_executesql @sql
但要注意,這是一個安全漏洞(SQL注入攻擊),所以如果你不能信任或好乾淨@a不應該做的。
因爲列名在運行時的SQL語句在編譯時決定不。
使用sp_executesql
這
Example
SET @SQLString = N'SELECT *
FROM table1
WHERE timet = @time and items in (@item)';
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
SET @ParmDefinition = N'@time timestamp,
@item varchar(max) ';
EXECUTE sp_executesql
@SQLString
,@ParmDefinition
,@time = '2010-04-26 17:15:05.667'
,@item = '''Item1'',''Item2'',''Item3'',''Item4'''
;
因爲這是不允許的。
insted的這個,你可以使用動態SQL查詢:
declare @a as varchar;
set @a='TEST'
exec ('select ' + @a + ' from x')
的問題是爲什麼不允許,而不是如何解決它。我無法看到回答「因爲它是不允許的」是非常有幫助的。 – 2010-04-28 07:06:40
@David M:是的,這只是一個解決方法。你的回答是有幫助的 – Alex 2010-04-28 07:14:44
感謝'exec' - 它比'exec sp_executesql'更容易記住等等等等。我記得總是在這個SP中出現錯誤,比如「不允許執行這個程序」。 – 2015-06-12 22:49:10
- 1. SQL Server中的變量名稱
- 2. SQL Server行名稱增量
- 3. SQL Server存儲過程 - 基於變量名稱更新列。
- 4. SQL Server +變量查找中的變量表名稱
- 5. SQL Server - 列名作爲變量
- 6. sql添加變量名稱列
- 7. 按列名稱分組的SQL變量
- 8. SQL符號/變量名稱
- 9. 使用SQL Server 2012批量重命名列名稱
- 10. 常量數據庫名稱在SQL Server
- 11. VBA:變量名稱陣列
- 12. 給列表變量名稱
- 13. 變量列表名稱
- 14. 在MS Sql Server 2016中聲明服務器名稱爲變量
- 15. 對於XML SQL Server - 輸出XML中的變量元素名稱
- 16. 在sql server中創建帶變量名稱的數據庫
- 17. 在SQL Server表中轉儲SSIS USER變量名稱和值
- 18. 更改SQL Server 2008中的列名稱
- 19. SqlDataSourceEnumerator不返回SQL Server名稱列表
- 20. SQL Server按名稱搜索列
- 21. Sql Server 2008有列顯示名稱嗎?
- 22. SQL Server無效的列名稱錯誤
- 23. 從SQL Server獲取列名稱
- 24. SQL Server Service Broker列名稱和類型?
- 25. SQL Server - 使用JSON返回列名稱
- 26. 無效列名稱的SQL Server
- 27. SQL Server 2008:創建動態列名稱
- 28. SQL Server:無效的列名稱
- 29. SQL Server變量
- 30. SQL Server 2005 - 基於在主要查詢中傳遞的變量的列名稱
除非你讀這個先不使用動態SQL: http://www.sommarskog.se/dynamic_sql.html – HLGEM 2010-04-28 16:52:46