我有个存储过程getId,参数 a,b,c,d(这4个参数是msg表的4个字段)
根据abcd的值,去查询id维护表,返回结果更新信息表时 希望这样:
update msg set mid=execute getId @a=a,@b=b,@c=c,@d=d就是根据msg表的a,b,c,d 用存储过程去查询id维护表,将返回结果设置给msg的mid字段。现在存储过程写完了,也测试过没问题,可是update时提示:关键字 'execute' 附近有语法错误。请问怎么实现这个功能?谢谢!

解决方案 »

  1.   

    declare @ret int 
    exec   @ret = getId @a,@b,@c,@d
    update msg set @ret
      

  2.   

    declare @dd int 
    set @dd =create table #N
    (
    aa int
    )insert into #N
    execute getId @a=a,@b=b,@c=c,@d=dupdate msg set mid =
    (select aa from #N)
      

  3.   

    declare @dd int 
    set @dd =create table #N
    (
    aa int
    )insert into #N
    execute getId @a=a,@b=b,@c=c,@d=dupdate msg set mid =
    (select aa from #N)
      

  4.   


    因为msg表的mid是记录中4个字段组合之后,加上一些逻辑之后生成的,mid主要结构是:abcd4个字段连接+3位自增。
    id维护表中有两列,h为msg表的abcd字段,f为序号自增(001)
    如果id维护表中存着着一个“abcd”的记录,那就把(001)自增,如果不存在,那就insert一个abcd的记录。所以调用存储过程时,需要msg表的abcd字段信息,而且是几十万的批量调用。update msg set mid=(select t.mid from limm t where  lid=t.lid)这种写法ok,但是是简单的一个根据查询更新,我现在需要实现这种根据复杂的查询,而且根据查询结果的不同,要对其它表操作的工作,所以不知道应该用什么方法实现。如果不用存储过程的话,怎么能实现我的需求?谢谢根据msg表的abcd四个字段,查询id维护表是否存在这个记录,有记录,自增返回;没有记录,插入id维护表一条新记录,并返回mid。
    返回mid后,更新msg表的mid数据量都是几万、几十万的批量操作,求助解决方案,谢谢。
      

  5.   


    update msg set mid=t.mid from limm t where t.a=msg.a and t.b=msg.b and t.c=msg.c 
    其中t.mid可以几个字段组合起来
      

  6.   


    mid不只是abcd是个字段的综合,后面还要跟个3位的自增,也就是说要是:abcd001,abcd002。
      

  7.   


    declare @sql varchar(8000)
    set @sql='update msg set'
    select  @sql = @sql+'getId=@a,@b,@c,@d'
    exec @sql