Сохранить исходное значение в базе данных, когда значение NULL передается хранимой процедуре - PullRequest
3 голосов
/ 31 июля 2009

Привет, я новичок в SQL и мне нужна помощь У меня есть параметризованная хранимая процедура, которая содержит запрос на обновление, как ...

UPDATE sometable 
SET 
    price1 =    @param1,
    price2 =    @param2,
    price3 =    @param3,
    price4 =    @param4,
WHERE
    ID = @param5

Теперь, когда я выполняю этот SP, устанавливая любое значение параметра как NULL, оно обновляется в БД, и я хочу знать, что если одно из значений параметра равно NULL, то мы можем сохранить исходное значение этого столбца в БД вместо обновляя его с NULL.

Ответы [ 2 ]

7 голосов
/ 31 июля 2009

В SQLServer аккуратным способом является использование ISNULL (@ param1, price1) .

Принимает @ param1 и проверяет, имеет ли он значение NULL. Если он равен NULL, он заменяется значением из цены1. Мне нравится ISNULL , так как он очень удобочитаемый, делает то, что говорит на банке.

Это не ANSI SQL, хотя там существует более гибкая команда: COALESCE . Это как ISNULL , но принимает любое количество параметров. Он просматривает их, чтобы найти первое ненулевое значение. Если ничего не найдено, возвращается NULL ...


UPDATE sometable 
SET 
        price1 =        ISNULL(@param1, price1),
        price2 =        ISNULL(@param2, price2),
        price3 =        ISNULL(@param3, price3),
        price4 =        ISNULL(@param4, price4)
WHERE
        ID = @param5


UPDATE sometable 
SET 
        price1 =        COALESCE(@param1, price1),
        price2 =        COALESCE(@param2, price2),
        price3 =        COALESCE(@param3, price3),
        price4 =        COALESCE(@param4, price4)
WHERE
        ID = @param5


Также см .: " COALESCE против ISNULL "

2 голосов
/ 31 июля 2009

Попробуйте обернуть @paramx оператором CASE:

CASE @paramx КОГДА НУЛЯЕТ ТОГДА Pricex ELSE @paramx END

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...