在MS SqlServer 查询分析器执行下面两段代码
A题.
declare @str varchar(50)
declare @str1 varchar(50)
declare @str2 varchar(50)
declare @str3 varchar(50)
set @str=null
set @str1='123'
set @str2='456'
set @str3='789'
if(@str+@str1<>@str2+@str3)
begin
  print 'abcd'
end
else
begin
  print 'efgh'
endB题.
declare @str varchar(50)
declare @str1 varchar(50)
declare @str2 varchar(50)
declare @str3 varchar(50)
set @str=null
set @str1='123'
set @str2='456'
set @str3='789'
if(isnull(@str,'')+@str1<>@str2+@str3)
begin
  print 'abcd'
end
else
begin
  print 'efgh'
endA结果为efgh,B结果为abcd
请大家帮我解释A.为什么'efgh'

解决方案 »

  1.   

    declare @str varchar(50) 
    declare @str1 varchar(50) 
    declare @str2 varchar(50) 
    declare @str3 varchar(50) 
    set @str=null 
    set @str1='123' 
    set @str2='456' 
    set @str3='789' 
    print @str+@str1 ---結果null
    print @str2+@str3 --結果456789
    if(@str+@str1 <>@str2+@str3) 
    begin 
      print 'abcd' 
    end 
    else 
    begin 
      print 'efgh' 
    end 
      

  2.   

    set @str=null 
    set @str1='123' 
    set @str2='456' 
    set @str3='789' 
    if(@str+@str1 <>@str2+@str3) 有为空,所以执行
    A结果为efgh
      

  3.   

    if(isnull(@str,'')+@str1 <>@str2+@str3) 
    把空转化为'',所以执行B结果为abcd 
      

  4.   

    SQL2008測試結果,看結果就知道了為什麼了~declare @str varchar(50) 
    declare @str1 varchar(50) 
    declare @str2 varchar(50) 
    declare @str3 varchar(50) 
    set @str=null 
    set @str1='123' 
    set @str2='456' 
    set @str3='789' 
    --print @str
    --print @str1
    --print @str2
    --print @str3}
    print @str+@str1
    print @str2+@str3if(@str+@str1 <>@str2+@str3) 
    begin 
      print 'abcd' 
    end 
    else 
    begin 
      print 'efgh' 
    end 
    null  這裡是空值
    456789
    efgh