exec 'delete from pageatgroups where groupid =1 and pageid in(3) and pageid<>1'
这样执行是错误的,我现在有个sql语句是放在变量里的,我想执行一下,怎么弄?

解决方案 »

  1.   

    declare  @sql varchar(8000)
    set @sql='delete from pageatgroups where groupid =1 and pageid in(3) and pageid <>1' 
    exec @sql
      

  2.   

    有变量得  组装字符串  exec @sql有取值得..或复杂得   用 sp_executesql 参照联机帮助
      

  3.   


    exec ''  -- error
    exec ('...') -- okexec ('delete from pageatgroups where groupid =1 and pageid in(3) and pageid <>1')
      

  4.   

    --1,2楼:exec @sql -- error
    exec (@sql) -- ok
      

  5.   

    alter PROC PROC_Mars_DelGroupPages
    @gid   bigint ,
    @pids   varchar(500)
    AS
    Begin
    delete PageAtGroups from PageAtGroups as a , Pages as b where a.pageid = b.id and groupid =@gid and b.pagename in (@pids) and a.pageid<>1
    EndPageAtGroups 1,'ZNPMRP'
    现在是这个问题服务器: 消息 2809,级别 18,状态 1,行 1
    过程 'PageAtGroups' 的请求失败,因为 'PageAtGroups' 是 表 对象。什么原因?
      

  6.   


    alter PROC PROC_Mars_DelGroupPages
    @gid   bigint ,
    @pids   varchar(500)
    AS
    Begin
    delete PageAtGroups from PageAtGroups as a , Pages as b where a.pageid = b.id and groupid =@gid and b.pagename in (@pids) and a.pageid<>1
    End
    PageAtGroups 1,'ZNPMRP'服务器: 消息 2809,级别 18,状态 1,行 1
    过程 'PageAtGroups' 的请求失败,因为 'PageAtGroups' 是 表 对象。我下面这样写就没错,为什么
    declare @gid bigint 
    declare @pids varchar(500)
    set @gid =2
    set @pids='ZNPMRP'delete PageAtGroups from PageAtGroups as a , Pages as b where a.pageid = b.id and groupid =@gid and b.pagename in (@pids) and a.pageid<>1
      

  7.   

    alter PROC PROC_Mars_DelGroupPages
    @gid   bigint ,
    @pids   varchar(500)
    AS
    Begin
    exec ('delete PageAtGroups from PageAtGroups as a , Pages as b where a.pageid = b.id and groupid =@gid and b.pagename in ('''+@pids+''') and a.pageid <>1')
    End
    goPageAtGroups 1,'ZNPMRP' 
      

  8.   

    PROC_Mars_DelGroupPages 1,'ZNPMRP'