SQL Server 2005存储过程

Mad*_* Zu 0 sql sql-server stored-procedures sql-server-2005 coalesce

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

我将一次更新一种交易类型(装运,收货或处置)

如果我正在更新货件,我将传入一个值,并将另外两个留空.

我如何编写存储过程,以便它只在我传入的值不是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 
Run Code Online (Sandbox Code Playgroud)

COALESCE 似乎不起作用,因为我一直在收到错误,是否还有其他功能可以用来实现这一目标?

我越来越:

'receiptID'附近的语法不正确.

我不明白为什么:(

谢谢!

Sac*_*hag 8

您收到错误的原因也可能是因为您','在每个错误结束时都丢失了set.

update tblX
set
disposalID = COALESCE(@disposalID, disposalID),
receiptID = COALESCE(@recID, receiptID),
shipmentID = COALESCE(@shipID,shipmentID)
where ID = @sID
Run Code Online (Sandbox Code Playgroud)

作为替代方案,假设您使用的是SQL Server ,则可以使用ISNULL().