假如有 A表 (aid,....)
       B表 (bid,aid,fieldname,value)
       C表 (cid,name,sex,age)
B表数据
bid   aid    fieldname value
1     1     c.name    张三
2     1     c.sex     男
3     2     c.name    李四
...  ...    ...       ...C表
cid   name    sex    age
1    王五    女     17
2    赵六    男     15
...  ...     ...    ...
知道aid、cid。用存储过程根据B表的数据怎么修改C表的数据
比如 知道aid=1,cid=1 根据aid查出B表的数据,然后跟据CID修改C表的数据
C表cid =1 的数据结果为 
cid    name   sex   age
1      张三   男    17这个要怎么实现  请各位大神指教........

解决方案 »

  1.   

    把你要修改的数据查出来,放到临时表#t
    update 
    set a.xx=t.xx...
    from 你要更新的表 a inner join #t b on a.主键=b.主键
      

  2.   

    先给b 行列转换一下 然后在join 一下更新
    ;WITH  t AS (
    SELECT  aid , [c.name] AS [name] , [c.sex] AS [sex]
    FROM    (
     SELECT [aid] , [fieldname] , [value] FROM [tb]
    ) a PIVOT ( MAX([value]) FOR [fieldname] IN ([c.name] , [c.sex]) ) pvt
    )
    UPDATE c
    SET    c.name=t.[name] , c.sex=t.[sex]
    FROM   c ,t
    WHERE  c.aid = b.aid
      

  3.   


    看不懂
    UPDATE c
    SET    c.name=t.[name] , c.sex=t.[sex]
    FROM   c ,t
    WHERE  c.aid = b.aid我这个表有100多列  如果这样更新的话 那太长了
    我想把B表的fieldname,value的值查出来,根据aid查出B表的几行数据,在后台处理,返回的值为
    "c.name = '张三',c.sex='女'" 把这个字符串传给存储过程
    这样我存储过程就能这样写了create proc proc_cUp
    @cid int,
    @field varchar(1000)
    as
    update c set @field where cid = @cid
    go我想我在后台应该知道怎么处理了 不用SQL了  谢谢各位大神