2013-09-16 26 views
-1

我有一段存储过程中的t-sql代码,它根据给定的参数执行搜索。我似乎无法理解下面的语句背后的逻辑:T-SQL if isnull()构造

if isnull(@LoginName, '') = '' 
    select @LoginName = null 

这里是我的思维方式:ISNULL是cheking的LoginName是否为空,如果是,那么它分配“”(这也是空,对吧?),然后将它与''(null?)进行比较。然后,如果表达式为真 - 为变量LoginName分配一个空值(为什么?它首先已经是空的!)。 有人可以在我的黑暗头上洒一些光。我根本不明白这个逻辑。谢谢。

+2

NULL和''是不同的东西。 – Rob

+0

@Rob:除非你使用Oracle。也许user2785029使用Oracle之前和那里一个空字符串被视为NULL。 –

+0

@a_horse_with_no_name - 我不知道 – Rob

回答

0

无论@LoginName是NULL还是'',它都会强制@LoginName为NULL。

+0

谢谢!我现在明白了。 – user2785029

0

那真是太傻了。应该是:

IF @LoginName = '' 
BEGIN 
    [email protected] = null 
END 

的代码是企图确保两个空值和空字符串值处理,但没有必要的空值转换为空字符串返回空转换,只需将空字符串转换如果它进来的话。

+0

我总是在IF语句中添加BEGIN和END,在维护期间减少意外。 – HLGEM

+0

谢谢澄清!我曾经在甲骨文工作过,因为a_horse_with_no_name指出这两件事是一回事。 – user2785029