Хранимая процедура сервера Sql

Мне нужно написать хранимую процедуру обновления. Я буду запрашивать параметры для всех столбцов (кроме идентификатора). Пользователь не будет постоянно отправлять все параметры. Он хочет отправить значение параметра NULL, поэтому не обновляйте этот столбец, столбцы, которые он хочет обновить, будут действительными значениями. Как мне написать хранимую процедуру для этого. По сути, мне нужно будет проверить значение каждого параметра, и если оно не равно нулю, то обновить только этот столбец. Заранее спасибо!!


person user228777    schedule 23.02.2010    source источник


Ответы (3)


Используйте COALESCE, чтобы установить для столбца новое значение, если оно равно NOT NULL, или вернуться к тому же исходному значению в противном случае:

UPDATE  MyTable

SET     MyColumn1 = COALESCE(@MyColumn1, MyColumn1),
        MyColumn2 = COALESCE(@MyColumn2, MyColumn2),
        MyColumn3 = COALESCE(@MyColumn3, MyColumn3)

WHERE   ID = @ID
person van    schedule 23.02.2010
comment
Спасибо, я попробую и дам вам знать. - person user228777; 23.02.2010
comment
Идеальный!! это сработало. Большое спасибо. Я должен отметить как принятый ответ или что-то в этом роде. Пожалуйста, дай мне знать. - person user228777; 23.02.2010

пытаться:

CREATE PROCEDURE YourUpdate
(
    @Param_PK    int
   ,@Param1      varchar(10)=NULL
   ,@Param2      int=NULL
   ,@Param3      datetime=NULL
)


UPDATE YourTable
    SET col1=COALESCE(@Param1,col1)
       ,col2=COALESCE(@Param2,col2)
       ,col3=COALESCE(@Param3,col3)
    WHERE PK=@Param_PK

go3
person KM.    schedule 23.02.2010
comment
обратите внимание, что синтаксис =NULL в объявлении параметра позволяет вам вызывать процедуру без указания этого параметра и что процедура по умолчанию использует =x, который в данном случае равен NULL. Итак, EXEC YourUpdate 123 допустимо, как и EXEC YourUpdate 123,'abc',5,'1/1/2010', так и EXEC YourUpdate @Param_PK=123,@Param2=5. - person KM.; 23.02.2010

Create Procedure MyProc ( @Param1 int,
@Param2 varchar(20),
@Param3 int = NULL)
As
Begin

-- the sp

End

См. @Param3, чтобы узнать, как указать значение по умолчанию.

person Thomas Lundström    schedule 23.02.2010
comment
Я не хочу устанавливать его в NULL. Когда пользователь устанавливает для этого параметра значение NULL, я не должен обновлять этот столбец. Я должен проверить значение каждого параметра и, если оно не равно NULL, обновить только эти столбцы. Оставьте столбцы (не обновлять), если значение установлено пользователем в NULL. - person user228777; 23.02.2010
comment
Ах, мой плохой. Затем вы хотите использовать COALESCE, как указано выше. - person Thomas Lundström; 25.02.2010