Хранимая процедура SQL Server 2005 - PullRequest
0 голосов
/ 10 марта 2011

Я пишу хранимую процедуру для обновления таблицы транзакций.

Я буду обновлять один тип транзакции за раз (отгрузка, получение или утилизация)

Если я обновляю груз, я передам значение и оставлю два других пустыми.

Как я могу написать хранимую процедуру, чтобы она обновляла поле только тогда, когда значение, которое я передаю, не равно 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, похоже, не работает, так как я получаю ошибки, есть ли другая функция, которую я могу использовать, чтобы это произошло?

Я получаю:

Неверный синтаксис рядом с «квитанцией».

Не понимаю, почему: (

Спасибо!

Ответы [ 3 ]

8 голосов
/ 10 марта 2011

Причина, по которой вы получаете ошибку, может также быть в том, что вы пропускаете ',' в конце каждого set.

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

В качестве альтернативы вы можете использовать ISNULL () при условии, что вы используете сервер SQL.

2 голосов
/ 10 марта 2011

что вы можете сделать, это поместить каждый оператор обновления в оператор IF или CASE.как:

IF @disposalid is not null:
     update tblX
     set disposalID = @disposalID
1 голос
/ 10 марта 2011

вы пытались использовать ISNULL ( check_expression , replacement_value )

...