如何根据存储过程的null或空字符串设置参数

时间:2011-08-30 15:36:27

标签: tsql stored-procedures

我有一个存储过程,为某些值插入空字符串。

以下是存储过程的相关部分。你可以看到,如果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为null或为空字符串,我希望能够使用相同的公式设置key2。

为了这个问题,我们假设我无法更改调用者,因此在某些情况下我可以获得空字符串或null,在key2不为null或空字符串的情况下,我想要按原样插入。

我确信有一种简单的方法可以做到这一点,但我真的不知道sql知道要搜索的内容。

4 个答案:

答案 0 :(得分:3)

您可以使用NULLIF

如果第一个参数的值等于第二个参数,则

NULLIF返回null。

ISNULL(NULLIF(@key2, ''),'abc'+LTRIM(STR(@key1,7,0)))

答案 1 :(得分:1)

你可以像

这样做
if @key2 = ''
set @key2 = null
在您拥有的代码之前

编辑:

或者编写一个函数,比如名为MyIsNull,检查@ key2是否为空或null,如果是,则返回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))));

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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))));