Подтвердить что ты не робот

Использование 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 необязательных параметров это, очевидно, будет кошмаром!

4b9b3361

Ответ 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'