2014-02-14 2 views
1

Для удобства использования я хранимые процедуры, которые имеют дополнительные параметры для отборного statments как ниже:Обновление таблицы с помощью хранимой процедуры с переменными параметрами

CREATE PROCEDURE stpProcedure 
    @Variable1 INT = NULL, 
    @Variable2 INT = NULL, 
    @Variable3 INT = NULL, 
    @NumberToReturn INT = 1000 
AS 
BEGIN 
    SELECT TOP (@NumberToReturn) Column1, 
            Column2, 
            Column3, 
            Column4 
    From       Table1 
    WHERE       (@Variable1 IS NULL OR Column1 = @Variable1) 
    AND        (@Variable2 IS NULL OR Column2 = @Variable2) 
    AND        (@Variable3 IS NULL OR Column3 = @Variable3) 
END 
GO 

Есть ли способ, чтобы использовать эту технику для операторов обновления ? Т.е. я хочу обновить один или несколько столбцов на основе ввода хранимой процедуры для конкретной таблицы. Пример того, что я пытаюсь сделать, это ниже:

CREATE PROCEDURE stpUpdate 
    @Variable1 INT = NULL, 
    @Variable2 INT = NULL, 
    @Variable3 INT = NULL, 
    @Variable4 INT, 
    @NumberToReturn INT = 1000 
AS 
BEGIN 
    Update  Table1 
    SET   Column1 = @Variable1, 
       Column2 = @Variable2, 
       Column3 = @Variable3 
    From  Table1 
    Where  Column4 = @Variable4 
END 
GO 
+0

Почему не просто заявление об обновлении вместе с условиями и пояснениями. – KumarHarsh

ответ

1

Вы можете использовать COALESCE() функции для создания такого рода обновление заявления

CREATE PROCEDURE stpUpdate 
    @Variable1 INT = NULL, 
    @Variable2 INT = NULL, 
    @Variable3 INT = NULL, 
    @Variable4 INT, 
    @NumberToReturn INT = 1000 
AS 
BEGIN 
    Update  Table1 
    SET   Column1 = COALESCE(@Variable1,Column1), 
       Column2 = COALESCE(@Variable2,Column2), 
       Column3 = COALESCE(@Variable3,Column3) 

    Where  Column4 = COALESCE(@Variable4,Column4) 
END 
GO 
+0

+1 Блестящий я не думал об этом. –

+0

Не проблема, рад, что это помогло :) –

0

Я знаю больше Postgres, чем SQL Server, может приведенное ниже утверждение может помочь вам.

UPDATE table1 SET Column1 = (CASE WHEN (Column1 IS NULL || [email protected]) THEN @Variable1 else Column1), 
Column2 = (CASE WHEN (Column2 IS NULL || Column2 == @Variable2) THEN @Variable2 else Column2), 
Column3 = (CASE WHEN (Column3 IS NULL || Column3 == @Variable3) THEN @Variable3 else Column3) 
Смежные вопросы