我有一個包含兩列(其他)的表:id和created_in_variant以及一個存儲過程,該存儲過程根據id計算created_in_variant值。 我想要做這樣的事情:使用存儲過程導致更新語句
UPDATE [dbo].[alerts]
SET [created_in_variant] = find_root [id]
有沒有一個很好的辦法做到這一點?
我有一個包含兩列(其他)的表:id和created_in_variant以及一個存儲過程,該存儲過程根據id計算created_in_variant值。 我想要做這樣的事情:使用存儲過程導致更新語句
UPDATE [dbo].[alerts]
SET [created_in_variant] = find_root [id]
有沒有一個很好的辦法做到這一點?
將存儲過程重寫爲標量值函數。然後你可以使用它來進行更新。
你可以使created_in_variant計算字段?
你可以使用,而不是存儲過程的UDF一些更多的信息。
我不這麼認爲。如果您將存儲過程轉換爲可用的縮放功能。
如果你想使用一個存儲過程,你必須爲每個id(在遊標中)調用存儲過程,並在OUTPUT變量中返回值,然後爲每個id和輸出變量進行更新。但是,使用UDF會更好。
您可以將存儲過程重新編程爲用戶定義的函數並使用它。
更改PROC成UDF,你基本上把它完全按照你有
UPDATE [dbo].[alerts]
SET [created_in_variant] = dbo.find_root([id])
如果你是被迫使用存儲過程來實現你問什麼,你可以簡單地保存發現的根在一個變量中的值並傳遞它。 有沒有沒有更簡單的方法,除非你像其他人所說的那樣使用UDF(用戶定義的函數)。
這是使用存儲過程時最簡單的答案之一,因爲您無法將存儲過程直接傳遞給UPDATE
語句。沒有像C#或Java等其他語言那樣的插值。
declare @root int
-- 1) Return the root through output parameter
exec find_root @id, @root out
-- or make the sproc to return the root value
exec @root = find_root @id
UPDATE [dbo].[alerts]
SET [created_in_variant] = @root
你簡直想念dbo。,DJ回答shuold已經很好。我今天有同樣的問題。
你能否提供一些關於「find_root」在做什麼的細節? – 2009-04-09 15:28:25