数据库中有张表Product,表中有大约80个字段,主键为KeyID,其中有大约15个是关联其他表的代码字段,名称为AID,BID,CID......。这些关联的表都有统一的结构,如AID关联表A,BID—>表B.....
表结构
AID   Title
1      电视
2      沙发
.....现在想用一个存储过程来实现将Product中某个KeyID的数据复制到表Product_History中,要求获得那些代码字段的代表的具体Title,Product表和Product_History表除了这些ID字段由numeric型变成nvarchar型外,其他表结构一致。存储过程的参数就是KeyID,请问请问,这个存储过程怎么写?
先行谢过了啊~~~~~~~*(关键在于要获取Title的ID字段很多)

解决方案 »

  1.   

    测试数据如下:A表
    AID Title
    1   电视
    2   沙发
    3   电脑B表
    BID  Title
    1     福州
    2     广州
    3     上海C表
    CID  Title
    1     X商城
    2     Y商城
    3     Z商城D表
    DID  Title
    1     1等品
    2     2等品
    3     3等品.....一共有15表此类表
    Product表
    KeyID  Sales  SalesDate  AID  BID  CID  DID.....
    1001   张三    2012-03-08  1    2     3   1 .....要求Product_History表
    KeyID  Sales   SalesDate  AID    BID   CID    DID.....
    1001   张三     2012-03-08  电视   广州   Z商城   3等品.....
      

  2.   


    create proc get_insert
    @keyid int
    as
    begin
    insert into history
    select ......
    from product t join tbA a on t.aid = a.id
                   join tbB b on t.bid = b.id
                   join ...
                   ...
    end
      

  3.   

    CREATE PROCEDURE GET_INSERT
    @keyid nvarchar(50)
    as
    begin
     --开始插入
      INSERT INTO history                 
        SELECT t.KeyID,Sales,SalesDate,A.Title,B.Title,C.Title.........
        FROM  product t INNER JOIN tbA A on A.AID=t.AID
                        INNER JOIN tbB B on B.AID=t.AID
                        INNER JOIN tbC C on C.AID=t.AID
    end
      

  4.   


    用关联查询有一个问题:当在相应的关联表中找不到对应的ID时,整条记录都不会被查找到。比如,由于历史原因Product表中有记录AID=99,但A表中没有AID=99的记录,此时用Join on就不会查找到记录,而在这里我要求History表中依然要存入值,只是AID字段为空。
      

  5.   

    那就用左连接。 
    CREATE PROCEDURE GET_INSERT
    @keyid nvarchar(50)
    as
    begin
     --开始插入
      INSERT INTO history                 
        SELECT t.KeyID,Sales,SalesDate,A.Title,B.Title,C.Title.........
        FROM  product t left JOIN tbA A on A.AID=t.AID
                        left JOIN tbB B on B.AID=t.AID
                        left JOIN tbC C on C.AID=t.AID........
    end