2009-04-09 28 views
1

我有一個包含兩列(其他)的表:id和created_in_variant以及一個存儲過程,該存儲過程根據id計算created_in_variant值。 我想要做這樣的事情:使用存儲過程導致更新語句

UPDATE [dbo].[alerts] 
    SET [created_in_variant] = find_root [id] 

有沒有一個很好的辦法做到這一點?

+0

你能否提供一些關於「find_root」在做什麼的細節? – 2009-04-09 15:28:25

回答

3

您可能想看看使用標量值功能(也稱爲用戶定義函數),而不是存儲過程對於這種類型的問題。

編輯:下面是一些有關信息SVFs:Click

編輯2:這裏是15 Seconds

0

將存儲過程重寫爲標量值函數。然後你可以使用它來進行更新。

0

你可以使created_in_variant計算字段?

0

你可以使用,而不是存儲過程的UDF一些更多的信息。

0

我不這麼認爲。如果您將存儲過程轉換爲可用的縮放功能。

如果你想使用一個存儲過程,你必須爲每個id(在遊標中)調用存儲過程,並在OUTPUT變量中返回值,然後爲每個id和輸出變量進行更新。但是,使用UDF會更好。

0

您可以將存儲過程重新編程爲用戶定義的函數並使用它。

1

更改PROC成UDF,你基本上把它完全按照你有

UPDATE [dbo].[alerts] 
    SET [created_in_variant] = dbo.find_root([id]) 
1

如果你是被迫使用存儲過程來實現你問什麼,你可以簡單地保存發現的根在一個變量中的值並傳遞它。 有沒有沒有更簡單的方法,除非你像其他人所說的那樣使用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 
0

你簡直想念dbo。,DJ回答shuold已經很好。我今天有同樣的問題。