数据库中有张表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字段很多)
表结构
AID Title
1 电视
2 沙发
.....现在想用一个存储过程来实现将Product中某个KeyID的数据复制到表Product_History中,要求获得那些代码字段的代表的具体Title,Product表和Product_History表除了这些ID字段由numeric型变成nvarchar型外,其他表结构一致。存储过程的参数就是KeyID,请问请问,这个存储过程怎么写?
先行谢过了啊~~~~~~~*(关键在于要获取Title的ID字段很多)
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等品.....
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
@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
用关联查询有一个问题:当在相应的关联表中找不到对应的ID时,整条记录都不会被查找到。比如,由于历史原因Product表中有记录AID=99,但A表中没有AID=99的记录,此时用Join on就不会查找到记录,而在这里我要求History表中依然要存入值,只是AID字段为空。
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