0

我正在编写一个存储过程来更新事务表。

我将一次更新一种交易类型(发货、收货或处置)

如果我要更新货件,我将传入一个值,而将其他两个留空。

我如何编写一个存储过程,以便它仅在我传入的值不是 NULL(或 0,以更容易者为准)时更新字段,而让其他字段保持原样?

这是我现在的位置:

CREATE PROCEDURE [dbo].[sp_UpdateTransaction] 
    -- Add the parameters for the stored procedure here
    @ID int,
    @disposalID int,
    @shipID int,
    @recID int,
as
begin
   update tblX
   set
     disposalID = COALESCE(@disposalID, disposalID)
     receiptID = COALESCE(@recID, receiptID)
     shipmentID = COALESCE(@shipID,shipmentID)
   where ID = @sID 
END 

COALESCE似乎不起作用,因为我不断收到错误,我可以使用另一个功能来实现这一点吗?

我越来越:

“receiptID”附近的语法不正确。

我不明白为什么:(

谢谢!

4

3 回答 3

8

您收到错误的原因也可能是因为您','在每个set.

update tblX
set
disposalID = COALESCE(@disposalID, disposalID),
receiptID = COALESCE(@recID, receiptID),
shipmentID = COALESCE(@shipID,shipmentID)
where ID = @sID

作为替代方案,您可以使用ISNULL()假设您使用的是 SQL 服务器。

于 2011-03-10T16:21:55.683 回答
2

您可以做的是将每个更新语句放在一个IF或一个CASE语句中。像:

IF @disposalid is not null:
     update tblX
     set disposalID = @disposalID
于 2011-03-10T16:23:12.177 回答
1

你试过用吗ISNULL ( check_expression , replacement_value )

于 2011-03-10T16:23:25.497 回答