Мне нужно написать хранимую процедуру обновления. Я буду запрашивать параметры для всех столбцов (кроме идентификатора). Пользователь не будет постоянно отправлять все параметры. Он хочет отправить значение параметра NULL, поэтому не обновляйте этот столбец, столбцы, которые он хочет обновить, будут действительными значениями. Как мне написать хранимую процедуру для этого. По сути, мне нужно будет проверить значение каждого параметра, и если оно не равно нулю, то обновить только этот столбец. Заранее спасибо!!
Хранимая процедура сервера Sql
Ответы (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
Спасибо, я попробую и дам вам знать.
- person user228777; 23.02.2010
Идеальный!! это сработало. Большое спасибо. Я должен отметить как принятый ответ или что-то в этом роде. Пожалуйста, дай мне знать.
- 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
обратите внимание, что синтаксис =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
Я не хочу устанавливать его в NULL. Когда пользователь устанавливает для этого параметра значение NULL, я не должен обновлять этот столбец. Я должен проверить значение каждого параметра и, если оно не равно NULL, обновить только эти столбцы. Оставьте столбцы (не обновлять), если значение установлено пользователем в NULL.
- person user228777; 23.02.2010
Ах, мой плохой. Затем вы хотите использовать COALESCE, как указано выше.
- person Thomas Lundström; 25.02.2010