2016-09-16 2 views
-2

Быстрый вопрос о Coalesce:Как установить NULL в Coalesce

clw.ClawbackPercent = Coalesce(@ClawbackPercent, clw.ClawbackPercent) 

позволяет сказать, что для столбца «ClawbackPercent» У меня есть значение 100.

Если я выполнить процедурный и набор параметров @ClawbackPercent чтобы иметь значение NULL, оно сохраняет значение 100 в строке для этого столбца, что отлично.

Однако, если я хочу установить 100, чтобы на самом деле был NULL, что мне нужно записать в инструкции exec proc или что мне нужно добавить в оператор Coalesce?

Спасибо

+1

Тогда вы пропустите выражение Coalesce. – jarlh

+0

Можете ли вы определить, что такое значение '@ ClawbackPercent', текущее значение столбца« ClawbackPercent »и ожидаемое значение столбца« ClawbackPercent »после значений для разных сценариев? На данный момент это звучит так, как вы ожидаете, что сможете установить '@ ClawbackPercent' в' NULL' в двух разных сценариях и нам как-то написать запрос, который волшебным образом ведет себя по-разному. –

+0

Итак, если параметр 'NULL', что должен делать SP? Сохраните предыдущее значение или замените его? Наверное, вы знаете, как это сделать. – Andrew

ответ

0

Это звучит, как вы хотите 100 быть По умолчанию значения параметра хранимой Proc, не обязательно, чтобы заменить все NULLs с этим значением. Если это так, вы не хотите COALESCE, но вам нужно предоставить значение по умолчанию для параметра определения proc.

например.

CREATE PROC dbo.MyProc (
@MyParam INT = 100 
) 
AS 
-- My code here 

Если кто-то выполняет эту прок без указания значения для @MyParam, по умолчанию 100 будет назначен. Если они явно указать @MyParam = NULL, то NULL будет присвоен ..

0

Тогда, вероятно, вы не должны использовать coalesce, вместо этого вы можете использовать case заявление, как показано ниже:

clw.ClawbackPercent = CASE WHEN @ClawbackPercent = 100 
           THEN NULL 
          ELSE 
           @ClawbackPercent END 

в операторе отбора

0

вы должны написать следующим образом:

CREATE PROCEDURE sp_test(
    @ClawbackPercent VARCHAR(30) 
) AS 
BEGIN 
    SELECT COALESCE(@ClawbackPercent, '100') 
END 

--call, как показано ниже, и если вы хотите, чтобы вернуть второй ст ALUE то, EXEC sp_test NULL

--Ел ваши вторые, трети ... параметры в INTEGER затем просто CAST в VARCHAR

EXEC sp_test 'NULL' 
Смежные вопросы