我有一个存储过程,为某些值插入空字符串。
以下是存储过程的相关部分。你可以看到,如果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知道要搜索的内容。
答案 0 :(得分:3)
答案 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))));