2014-12-22 3 views
0

это мой сценарий в моей хранимой процедуреуборщик способ вставки

IF(@[email protected] = 0) 
BEGIN 
    INSERT INTO @TempTable values ('value1',null); 
END 
ELSE 
BEGIN 
    INSERT INTO @TempTable values ('value2',@[email protected]); 
END 

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

+0

Do у вас есть доказательства того, что это проблема? A IF THEN не является большой проблемой для расчета ... Использование CASE ELSE не даст вам лучших характеристик, просто другого кода. –

+0

Это действительно намного лучше сделать это в 1 запросе. Подумайте о том, что произойдет, если запрос станет действительно большим, тогда это может вызвать много дублирования кода. – wvdz

ответ

3

Вот способ, чтобы написать это с помощью nullif():

INSERT INTO @TempTable 
    SELECT 'value1', NULLIF(@Param1 + @Param2, 0); 

Вы должны явно перечислить столбцы в вставки:

INSERT INTO @TempTable(col1, col2) 
    SELECT 'value1', NULLIF(@Param1 + @Param2, 0); 
+0

Прохладный ... не знал о функции NULLIF. Похоже, это может пригодиться. – user2366842

+0

@ пользователь2366842. , , Это полезная функция, но, по общему признанию, я использую ее прежде всего для предотвращения деления на ноль. –

4

Вы можете использовать случай, когда

INSERT INTO @TempTable VALUES 
    (CASE WHEN @Param1 + Param2 = 0 THEN 'value1' ELSE 'value2' END, 
    CASE WHEN @Param1 + Param2 = 0 THEN NULL ELSE @PARAM1 + @PARAM2 END) 
Смежные вопросы