Использование UPDATE в хранимой процедуре с дополнительными параметрами
У меня такой SP (с использованием SQL Server):
ALTER PROCEDURE [dbo].[sp_ClientNotes_update]
@id uniqueidentifier,
@ordering smallint = NULL,
@title nvarchar(20) = NULL,
@content text = NULL
AS
BEGIN
SET NOCOUNT ON;
UPDATE tbl_ClientNotes
SET [email protected], [email protected], [email protected]
WHERE [email protected]
END
Я хотел бы установить только значения, если они переданы в SP, то есть не NULL. Это можно сделать?
Этот вопрос, кажется, предлагает единственный способ использовать полностью отдельные запросы с условными выражениями, но для 3 необязательных параметров это, очевидно, будет кошмаром!
Ответы
Ответ 1
Попробуйте это.
ALTER PROCEDURE [dbo].[sp_ClientNotes_update]
@id uniqueidentifier,
@ordering smallint = NULL,
@title nvarchar(20) = NULL,
@content text = NULL
AS
BEGIN
SET NOCOUNT ON;
UPDATE tbl_ClientNotes
SET ordering=ISNULL(@ordering,ordering),
title=ISNULL(@title,title),
content=ISNULL(@content, content)
WHERE [email protected]
END
Также возможно добавить дополнительную часть в предложение WHERE
, если вы используете транзакционную репликацию, тогда она отправит другому абоненту новое обновление, если все будут NULL, чтобы предотвратить это.
WHERE [email protected] AND (@ordering IS NOT NULL OR
@title IS NOT NULL OR
@content IS NOT NULL)
Ответ 2
UPDATE tbl_ClientNotes
SET
[email protected],ordering),
title=isnull(@title,title),
content=isnull(@content,content)
WHERE [email protected]
Я думаю, что помню, что раньше, если вы обновляетесь до того же значения, SQL Server действительно распознает это и не сделает ненужной записи.
Ответ 3
Одна идея:
UPDATE tbl_ClientNotes
SET ordering=ISNULL(@ordering, ordering), title=ISNULL(@title, title), content=ISNULL(@content, content)
WHERE [email protected]
Ответ 4
UPDATE tbl_ClientNotes
SET [email protected], [email protected], [email protected]
WHERE [email protected]
AND @ordering IS NOT NULL
AND @title IS NOT NULL
AND @content IS NOT NULL
Или, если вы имели в виду, что хотите обновить отдельные столбцы, вы должны использовать сообщение выше моего. Я прочитал его, так как не обновляю, если любые значения равны null
Ответ 5
ALTER PROCEDURE LN
(
@Firstname nvarchar(200)
)
AS
BEGIN
UPDATE tbl_Students1
SET [email protected]
WHERE Studentid=3
END
exec LN 'Thanvi'