我創建了一個存儲過程來僅更新已改變更新僅使用聚結和動態SQL改變的值
我用SQLSERVER3210功能的表的行。
CREATE PROCEDURE update_only_changed
@FName varchar(50) = NULL,
@LName varchar(50) = NULL,
@CUST_DB VARCHAR(20)
AS
BEGIN
DECLARE @QUERY VARCHAR(255)
SET @QUERY = 'UPDATE ' + @CUST_DB + '..people SET LastName = COALESCE(@LName, LastName) WHERE id = 1'
EXEC (@QUERY)
END
GO
一些考慮
是數據庫的名稱作爲過程的參數傳遞
所以,當一個動態SQL
我運行SQL我有兩種情況:
EXEC(@ QUERY)
:I get the error saying: Must declare the scalar variable "@ LName". it does not interpret the variable that the command coalesce
EXEC @QUERY (without parentheses)
I get the error saying: The database 'UPDATE CUSTOMER' does not exist. Make sure the name is spelled correctly.
我怎樣才能把那個工作?
記住,如果運行與更新語句靜態的過程,沒有EXEC,它的工作原理
UPDATE CUSTOMER..people SET LastName = COALESCE(@LName, LastName) WHERE id = 1
裏卡多,你考慮過,這個UPDATE將總是在執行時更新行嗎?如果只想在@LName與LastName的當前值不同時執行更新操作,則需要在構造的查詢中添加附加條件。 – 2012-07-26 14:03:48
@Kuba Wyrostek函數'coalesce'對於變量,我不neet做一個條件。 – 2012-07-26 14:23:13
不,它沒有。它要麼使用@LName值更新LastName列,要麼更新LastName列的當前值,但它總是**更新。 – 2012-07-26 14:24:51