sql语句中的exec语句什么时候用,是怎么用的啊
还有就是case  when .............then   和if语句用法有区别吗 可以通用吗?

解决方案 »

  1.   

    exec 是用来执行动态SQL语句的跟case when then 、if语句没有关系
      

  2.   

    case when .............then是运算符,可以用来构造表达式
    if则是控制语句执行顺序的
      

  3.   

    我知道和case when then 、if语句没有关系,我就是case when then 这个语句和if语句的区别,能否互用
      

  4.   

    EXEC 主要用来执行存储过程或动态SQL语句串。
      

  5.   

    declare @s nvarchar(100)
    set @s='select * from tb'
    执行了上面两句后
    exec @s 
    就和
    select * from tb
    命令是一样的结果了
      

  6.   

    在某些情况下,作用是一样的,如
    declare @i int,@r int
    set @i=8if @i<10 set @r=0 else set @r=1
    select @r as r1set @r=case when @i<10 then 0 else 1 end
    select @r as r2/**
    r1
    -----------
    0(1 行受影响)r2
    -----------
    0(1 行受影响)
    **/
      

  7.   

    当然,你会问,那我为什么不直接用select * from tb
    问题是有的时候,我们需要用代码"拼接"出一个复杂的语句,存入一个串变量,再用exec执行这个串中的命令
    常见的行列转换,当项目数不定时,就用的这种方法, 例如下:
    if object_id('tb') IS NOT NULL
    DROP TABLE tb
    GOcreate table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
    insert into tb values('张三' , '语文' , 74)
    insert into tb values('张三' , '数学' , 83)
    insert into tb values('张三' , '物理' , 93)
    insert into tb values('李四' , '语文' , 74)
    insert into tb values('李四' , '数学' , 84)
    insert into tb values('李四' , '物理' , 94)
    go
    --SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
    declare @sql varchar(8000)
    set @sql = 'select 姓名 '
    select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
    from (select distinct 课程 from tb) asAS
    PRINT @sql
    set @sql = @sql + ' from tb group by 姓名'
    exec(@sql) 
      

  8.   

    declare @sql varchar(8000)
    set @sql = 'select 姓名 '
    select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
    from (select distinct 课程 from tb) asAS
    上面这段,就是在拼接命令串
    exec(@sql)最终执行了该命令串
      

  9.   


    sql server的动态语句用法 
    http://blog.csdn.net/xys_777/archive/2010/06/24/5690909.aspx