Как я могу установить параметр в хранимой процедуре, основываясь на том, является ли он пустым или пустой строкой - PullRequest
2 голосов
/ 30 августа 2011

У меня есть хранимая процедура, которая вставляет пустые строки для определенных значений.

Ниже приведена соответствующая часть хранимой процедуры. Вы можете видеть, что если key2 равен NULL, то мы устанавливаем его значение на основе key1.

IF NOT EXISTS (SELECT * FROM myTable WHERE key1 = @key1)
       INSERT INTO myTable (key1,key2)
       VALUES (@key1, ISNULL(@key2,'abc'+LTRIM(STR(@key1,7,0))));

То, что я хотел бы сделать, это установить key2 по той же формуле, если key2 имеет значение null или пустую строку.

Ради этого вопроса, давайте предположим, что я не могу изменить вызывающего абонента, чтобы в некоторых случаях я мог получить либо пустую строку, либо нулевую. В случае, когда key2 не является нулевой или пустой строкой, тогда вставить его как есть.

Я уверен, что есть простой способ сделать это, но я действительно не знаю достаточно sql, чтобы знать, что искать.

Ответы [ 4 ]

3 голосов
/ 30 августа 2011

Вы можете использовать NULLIF.

NULLIF возвращает ноль, если значение первого параметра равно второму параметру.

ISNULL(NULLIF(@key2, ''),'abc'+LTRIM(STR(@key1,7,0)))
1 голос
/ 30 августа 2011

вы можете сделать что-то вроде

if @key2 = ''
set @key2 = null

перед кодом, который у вас есть

Редактировать:

Или написать функцию, скажем, MyIsNull, которая проверяет, является ли @key2 является пустым или нулевым, и если да, возвращает null, иначе возвращает @ key2

, тогда у вас будет

IF NOT EXISTS (SELECT * FROM myTable WHERE key1 = @key1)
       INSERT INTO myTable (key1,key2)
       VALUES (@key1, ISNULL(MyIsNull(@key2),'abc'+LTRIM(STR(@key1,7,0))));
0 голосов
/ 30 августа 2011

Функция nullif преобразует вашу пустую строку или любое другое выражение в null, чтобы вы могли использовать непротиворечивую формулу

IF NOT EXISTS (SELECT * FROM myTable WHERE key1 = @key1)
   INSERT INTO myTable (key1,key2)
   VALUES (@key1, ISNULL(NULLIF(@key2, ''),'abc'+LTRIM(STR(@key1,7,0))));
0 голосов
/ 30 августа 2011
IF NOT EXISTS (SELECT 1 FROM myTable WHERE key1 = @key1)
BEGIN
    IF @key2 IS NULL OR @key2 = ''
         SET @key2 = 'abc'+LTRIM(STR(@key1,7,0))

     INSERT INTO myTable (key1,key2)
     VALUES (@key1, @key2);
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...