急求存储过程:表之间复制数据

lilyjingzi 2012-03-09 03:00:24
数据库中有张表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字段很多)
...全文
154 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuohuameijiang 2012-03-12
  • 打赏
  • 举报
回复
那就用左连接。


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
lilyjingzi 2012-03-12
  • 打赏
  • 举报
回复

用关联查询有一个问题:当在相应的关联表中找不到对应的ID时,整条记录都不会被查找到。比如,由于历史原因Product表中有记录AID=99,但A表中没有AID=99的记录,此时用Join on就不会查找到记录,而在这里我要求History表中依然要存入值,只是AID字段为空。
renwenli07461 2012-03-09
  • 打赏
  • 举报
回复
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
勿勿 2012-03-09
  • 打赏
  • 举报
回复
这不算多,实际工作中几十张都很有可能的了。没什么不好。
[Quote=引用 7 楼 lilyjingzi 的回复:]
关联查询是很简单,可是关联太多,十几张表的关联,对查询原理不太懂,但总觉得这么操作不是很好。。。
[/Quote]
lilyjingzi 2012-03-09
  • 打赏
  • 举报
回复
关联查询是很简单,可是关联太多,十几张表的关联,对查询原理不太懂,但总觉得这么操作不是很好。。。
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 acherat 的回复:]

SQL code

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 ...
……
[/Quote]



+
勿勿 2012-03-09
  • 打赏
  • 举报
回复
关联查询、不懂就去看书。
AcHerat 元老 2012-03-09
  • 打赏
  • 举报
回复

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
lilyjingzi 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kuqideyupian 的回复:]
给几个具体的表和测试数据吧
[/Quote]
测试数据如下:

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等品.....
唐诗三百首 2012-03-09
  • 打赏
  • 举报
回复
用动态SQL,

_0筱筱0_ 2012-03-09
  • 打赏
  • 举报
回复
给几个具体的表和测试数据吧

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧