如何根据2个参数在更新语句中设置值?

时间:2015-01-08 09:43:48

标签: sql tsql stored-procedures sql-update

目前我有一个存储过程,其中包含一个更新语句,其中包含大约40个已更新的值。如果使用COALESCE()输入不为null,则其中一些仅更新。我想知道我是否也可以做类似的事情,但基于另一个参数的输入以及它自己。例如:

UPDATE MyTable
SET FirstName = @FirstName,
    LastName = @LastName,
    JobNumber = (IF @MyMainParameter IS NOT NULL
                     COALESCE(@JobNumber, JobNumber)
                 ELSE
                     JobNumber)
WHERE ...

显然这不起作用,但在本例中我只想更新作业号,如果@MyMainParameter不为null且@JobNumber参数不为null。

显然,我可以根据我的@MyMainParameter是否为null来执行单独的更新语句,例如:

IF @MyMainParameter IS NOT NULL
BEGIN
    UPDATE MyTable
    SET JobNumber = COALESCE(@JobNumber, JobNumber)
    WHERE...
END

但是,如果我只做1,那么做2个更新语句似乎不是最佳选择。

1 个答案:

答案 0 :(得分:0)

原来我脑子里冻结了。显然,使用CASE WHEN语句可以很容易地做到这一点:

UPDATE MyTable
SET FirstName = @FirstName,
    LastName = @LastName,
    JobNumber = CASE WHEN @MyMainParameter IS NOT NULL THEN COALESCE(@JobNumber, JobNumber) ELSE JobNumber END
WHERE ...