直接使用 case when .. then .. else .. end 代替

解决方案 »

  1.   

    --写成存储过程的中就会, 写成UDF的就不会了
    --觉得只能用动态SQL语句来实现
    --测试数据
    CREATE PROC IIF (@Expr varchar(10),@Truepart varchar(10)
    ,@Falsepart varchar(10), @rst varchar(10) output)
    AS
    declare @str nvarchar(1000)
    set @str='if '+@expr+' set @rst= @Truepart ' --为真时进行的操作
    set @str=@str+' else set @rst=@falsepart '--为假时进行的操作
    --运行动态SQL语句
    exec sp_executesql @str, N'@Truepart varchar(10),@Falsepart varchar(10)
           ,@rst varchar(10) output',@truepart=@truepart
           ,@falsepart=@falsepart, @rst=@rst output
    go
    --示例
    declare @stemp varchar(10)
    exec IIF '1=1', 'yes', 'no', @stemp output
    select @stemp
    --清除
    drop proc iif
      

  2.   

    谢谢高手 挺经典的 
    问一下 
    这里有些看不懂 .... 对了 可以介绍几本书吗 :)关于SQL 比较好的
    --运行动态SQL语句
    exec sp_executesql @str, N'@Truepart varchar(10),@Falsepart varchar(10)
           ,@rst varchar(10) output',@truepart=@truepart
           ,@falsepart=@falsepart, @rst=@rst output