我创建了一个存储过程来仅更新已更改的表的行
我使用了 SQLSERVER coalesce
函数。
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.
我怎么能把它用于工作?
请记住,如果运行带有update语句的过程静态,没有EXEC,则可以正常运行
UPDATE CUSTOMER..people SET LastName = COALESCE(@LName, LastName) WHERE id = 1
答案 0 :(得分:0)
第一个不起作用,因为在exec的上下文中没有变量@Lname - 它只存在于过程的作用域中。您需要使用sp_executesql
而不是exec
exec sp_executesql @query, N'@LName varchar(50)', @Lname
<强> BUT 强>
我不建议像这样做任何事情。