簡體   English   中英

查詢中的變量

[英]Variable in query

你好我有一個小問題。 我必須以這種方式執行查詢。 在示例中,類似的東西

declare @name varchar(max)
set @name = 'ColumnID'
select @name from Account

返回很多“ColumnID”,但我將在 Account 表中有一個結果列 ColumnID

您將想要執行動態 SQL 語句:

exec('select ' + @name + ' from Account');

小心過度使用這些,因為它們可能帶有相當沉重的包袱:

優點

  • 它提供了靈活性和可擴展性
  • 它可以減少編寫的代碼行數

缺點

  • 它可能變得非常復雜且難以閱讀。 想想引號中嵌入的引號,以及其他類似的東西。
  • 它可能對代碼穩定性產生不利影響。 一些動態 SQL 錯誤要到運行時才能知道。 (這方面的一個例子是您引用一個不存在的表)
  • 動態 SQL 代碼比等效的 static SQL 更難測試。 也可能無法測試 Dynamic SQL 將遇到的所有可能情況,從而引入固有風險。
  • 在您的代碼庫中對動態 SQL 進行有效的影響分析將更加困難。
  • SQL injection and misuse - Dynamic SQL is more prone to misuse, and is invariably less safe than static SQL
  • Dynamic SQL 中的查詢代碼不受查詢計划的約束,因此可能會錯過此類優化。 As such, it can be slower than the equivalent static SQL As the SQL query is not known until runtime, it can be harder to performance-tune SQL
  • 動態代碼(例如,確定表上可能需要的索引)

嘗試這個:

declare @name varchar(max);
set @name = 'ColumnID';

exec('select ' + @name + ' from Account');

嘗試使用 sp_executesql 存儲過程

declare @name nvarchar(20);
set @name = 'ColumnID';
declare @sql nvarchar(max)
set @sql='select ' + @name + ' from Account'
exec sp_executesql  @sql

暫無
暫無

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

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