任何人都可以建議我是否可以在下面描述的場景中動態地聲明和賦值給變量?
我已經編寫了一個存儲過程(sproc),用於計算組織的子組中成員的百分比。我知道有7個子組。我將百分比計算的結果存儲在7個變量中,後面我將其用於sproc中。每個變量都根據子組名稱命名。
當然,這意味着如果子組的名稱或數量發生變化,我必須重寫部分sproc。
我相信動態SQL可以用於允許sproc適應子組中的更改,但我不確定如何爲此方案設置動態SQL。任何人都可以提供一個例子或指導?
任何人都可以建議我是否可以在下面描述的場景中動態地聲明和賦值給變量?
我已經編寫了一個存儲過程(sproc),用於計算組織的子組中成員的百分比。我知道有7個子組。我將百分比計算的結果存儲在7個變量中,後面我將其用於sproc中。每個變量都根據子組名稱命名。
當然,這意味着如果子組的名稱或數量發生變化,我必須重寫部分sproc。
我相信動態SQL可以用於允許sproc適應子組中的更改,但我不確定如何爲此方案設置動態SQL。任何人都可以提供一個例子或指導?
什麼你提議去對SQL糧食服務器。您對以後需要重寫的擔心可以說明這一點...所以您正處於正確的軌道上。
一般而言,您希望將結果轉化爲某種面向集合的事物......表格式...其中一列具有子組名稱,另一列具有計算值。
您可能會發現table-valued functions更適合您的問題......但很難說......我們並不深究這個問題的細節。
動態SQL幾乎總是最後的手段。這似乎很有趣,但有各種各樣的問題......其中最重要的是以程序安全和一致的方式處理結果。
你可以按照這個簡單的查詢就看你如何能做到這一點
declare @sql nvarchar(max) = ''
declare @outerX int = 0 -- this is your variable you want to set it from dynamic SQL
declare @i int = 0 -- for loop
while @i <= 6
begin
set @sql = 'select @x = ' + CAST(@i as varchar)
exec sp_executesql @sql, N'@x int OUTPUT', @x = @outerX output
set @i = @i + 1
print @outerX
end
輸出將被
0
1
2
3
4
5
6
動態SQL通常不是sql問題的解決方案。就像遊標一樣,它有它的位置,但很容易搞砸,難以維護,容易受到注入攻擊。考慮使用一個臨時表(或表變量),每個「變量」有一行,而不是使用標準的sql變量。 – StingyJack