直接先做一个Delete,然后Insert

解决方案 »

  1.   

    我有三張表:表pd:
    pdid           pdDate         sid
    001         2006-12-12        002
    002         2006-12-12        001表pdDetail:
    pdid           pid            quantity
    001           0301003            5
    001           0402101            3
    001           0301001            2
    002           0301001            3表stock
    pid            quantity         sid我要用第一张表和第二张表更新到第三张表,每一个字段都要对应好,如果stock里已经存在pid就更新,如果没有就插入,如:存在
    pid            quantity         sid
    0301001            1            001
    则更新quantity的值为3,
    如果没有0402101这条记录,则插入这条记录,该如何实现
    求高手指点。create table pd(pdid  varchar(10),         pdDate datetime,     sid varchar(10))
    insert pd
    select '001'  ,       '2006-12-12'   ,     '002' union all
    select '002'    ,     '2006-12-12'    ,    '001'create table pdDetail( pdid   varchar(10) ,       pid varchar(10),            quantity int)
    insert pdDetail
    select '001',           '0301003',            5 union all
    select '001',           '0402101',            3 union all
    select '001',           '0301001',            2 union all
    select '002',           '0301001',            3create table stock(pid  varchar(10),          quantity  int  ,     sid varchar(10))drop table pd,pdDetail,stock
    分两步做:
    --一步
    update stock
    set stock.quantity=pdDetail.quantity,stock.sid=pd.sid
    from pd,pdDetail,stock 
    where pd.pdid=pdDetail.pdid and stock.pid=pdDetail.pid--存在更新
    --二步
    insert stock
    select pdDetail.pid,pdDetail.quantity,pd.sid
    from pd,pdDetail where pd.pdid=pdDetail.pdid
    and not exists(select 1 from stock  where pid=pdDetail.pid)--没有插入select * from stock
    pid        quantity    sid        
    ---------- ----------- ---------- 
    0301001    2           002
    0301001    3           001
    0301003    5           002
    0402101    3           002(所影响的行数为 4 行)
      

  2.   

    roy_88 有些错误,用在我这里可能丢失数据