create procedure sp_test
@i int
as
declare @str varchar(200)
set @str ='Sql '
if (@i <> 0) or (@i is not null)
set @str += 'is pig'
print @str
goexec sp_test 0
为什么最后输出的是Sql is pig

解决方案 »

  1.   

    create procedure sp_test
    @i int
    as
    declare @str varchar(200)
    set @str ='Sql '
    if (@i <> 0) or (@i is not null)
    begin
        set @str += 'is pig'
        print @str
    end
    go
      

  2.   

    if (@i <> 0) and (@i is not null)
      

  3.   

    create procedure sp_test
    @i int =null
    as
    declare @str varchar(200)
    set @str ='Sql '
    if (@i = 0) or (@i is null)
        set @str += 'is pig'
    print @str
    goexec sp_test Sql is pigexec sp_test 0Sql is pig写错了吧
      

  4.   

    逻辑错误,直接用AND 就行了
    要么 if isnull(@i, 0)<>0 代替
      

  5.   

    int类型判断为空?在数据库中不知道,在程序中的话值类型应该没有为空这一说,数据库中就不知道了,另外定义@i没有初值?
      

  6.   

    alter procedure sp_test
    @i int =null
    as
    declare @str varchar(200)
    set @str ='Sql '
    if (@i <> 0) and (@i is not null)
        set @str += 'is pig'
    print @str
    goexec sp_test Sql exec sp_test 0Sql 
      

  7.   

    @i <> 0 为假 或 @i is not null 为真,当然就是真了,输出肯定是 Sql is pig 哈哈