求一插入表的脚本或存储过程

sunshine_os 2008-07-02 10:05:47
有2个结构完全相同的两个表:表1,表2,
表中有一个mbi_id 字段 是Int 类型,没有自动增加1的属性,建了索引

该表通过外部应用程序输入数据时
mbi_id字段的值是 max(mbi_id)+1

表1
mbi_id,col1,col2
1 aa aa
2 bb bb
3 cc cc
.
.
99 ss sd
100 sa ss


表2
mbi_id,col1,col2
1 xxx xxx
2 xxx xxx
3 xx xxx
.
.
199 xx xxx
200 xx xxx


现在的问题是 我想通过脚本
把 biao1的所有数据插入到biao2 中,得到

表2
mbi_id,col1,col2
1 xxx xxx
2 xxx xxx
3 xx xxx
.
.
199 xx xxx
200 xx xxx
201 aa aa
202 bb bb
203 cc cc
.
.
299 ss sd
300 sa ss
...全文
77 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunshine_os 2008-07-06
  • 打赏
  • 举报
回复
。。。
苦*行*僧大哥 最先给我正确答案的额

分当然只能给 苦*行*僧大哥啦

不能破坏这的游戏规则么~
-晴天 2008-07-02
  • 打赏
  • 举报
回复
有2个结构完全相同的两个表:表1,表2, 
表中有一个mbi_id 字段 是Int 类型,没有自动增加1的属性,建了索引

该表通过外部应用程序输入数据时
mbi_id字段的值是 max(mbi_id)+1

表1
mbi_id,col1,col2
1 aa aa
2 bb bb
3 cc cc
.
.
99 ss sd
100 sa ss


表2
mbi_id,col1,col2
1 xxx xxx
2 xxx xxx
3 xx xxx
.
.
199 xx xxx
200 xx xxx


现在的问题是 我想通过脚本
把 biao1的所有数据插入到biao2 中,得到

表2
mbi_id,col1,col2
1 xxx xxx
2 xxx xxx
3 xx xxx
.
.
199 xx xxx
200 xx xxx
201 aa aa
202 bb bb
203 cc cc
.
.
299 ss sd
300 sa ss


大哥 你这样 运行的结果是 
表1

1 aa aa
2 bb bb
3 cc cc
99 ss sd
100 sa ss

表2
1 xxx xxx
2 xxx xxx
3 xx xxx
199 xx xxx
200 xx xxx


插入后你的结果为
1 xxx xxx
2 xxx xxx
3 xx xxx
199 xx xxx
200 xx xxx
201 xxx xxx
202 xxx xxx
203 xx xxx
399 xx xxx


正确的结果应该为
1 xxx xxx
2 xxx xxx
3 xx xxx
199 xx xxx
200 xx xxx
201 aa aa
202 bb bb
203 cc cc
204 ss sd
205 sa ss


楼主不厚道.
nzperfect 2008-07-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 qianjin036a 的回复:]
SQL codedeclare@表1table([mbi_id]int,[col1]nvarchar(2),[col2]nvarchar(2))Insert@表1select1,N'aa',N'aa'unionallselect2,N'bb',N'bb'unionallselect3,N'cc',N'cc'unionallselect99,N'ss',N'sd'unionallselect100,N'sa',N'ss'declare@表2table([mbi_id]int,[col1]nvarchar(3),[col2]nvarchar(3))Insert@表2select1,N'xxx',N'xxx'unionallselect2,N'xxx',N'xxx'unionallselect3,N'xx',N'xxx'unionallselect199,N'xx',N'xxx'un…
[/Quote]

错在你不连续 ~
-晴天 2008-07-02
  • 打赏
  • 举报
回复
declare @表1 table([mbi_id] int,[col1] nvarchar(2),[col2] nvarchar(2))
Insert @表1
select 1,N'aa',N'aa' union all
select 2,N'bb',N'bb' union all
select 3,N'cc',N'cc' union all
select 99,N'ss',N'sd' union all
select 100,N'sa',N'ss'

declare @表2 table([mbi_id] int,[col1] nvarchar(3),[col2] nvarchar(3))
Insert @表2
select 1,N'xxx',N'xxx' union all
select 2,N'xxx',N'xxx' union all
select 3,N'xx',N'xxx' union all
select 199,N'xx',N'xxx' union all
select 200,N'xx',N'xxx'

declare @maxid int
select @maxid = max(mbi_id) from @表2
insert into @表2 select mbi_id+@maxid,col1,col2 from @表1

select * from @表2
/*
mbi_id col1 col2
----------- ---- ----
1 xxx xxx
2 xxx xxx
3 xx xxx
199 xx xxx
200 xx xxx
201 aa aa
202 bb bb
203 cc cc
299 ss sd
300 sa ss

(10 行受影响)
*/

1楼错在哪?
nzperfect 2008-07-02
  • 打赏
  • 举报
回复
tnnd~
nzperfect 2008-07-02
  • 打赏
  • 举报
回复
不厚道,一点分不给 ~
hery2002 2008-07-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wgzaaa 的回复:]
2楼的最后一个@表2应是@表1
1楼是对的
[/Quote]
按照4楼的要求,5楼才是正确的 :)
sunshine_os 2008-07-02
  • 打赏
  • 举报
回复
强人 就是强人啊
谢谢大哥了~
nzperfect 2008-07-02
  • 打赏
  • 举报
回复
INSERT INTO @表2
SELECT ISNULL(( SELECT MAX([mbi_id]) FROM @表2),1) + [mbi_id],[col1],[col2] FROM @表2
改为:
INSERT INTO @表2
SELECT ISNULL(( SELECT MAX([mbi_id]) FROM @表2),1) + [mbi_id],[col1],[col2] FROM @表1

他手误了,把最后的@表2改成@表1

我是楼主的朋友,给点分吧. ^ ^
wgzaaa 2008-07-02
  • 打赏
  • 举报
回复
2楼的最后一个@表2应是@表1
1楼是对的
hery2002 2008-07-02
  • 打赏
  • 举报
回复
INSERT INTO @表2
SELECT ISNULL(( SELECT MAX([mbi_id]) FROM @表2),1) + (select count(1) from @表1 where [mbi_id]<=t.[mbi_id] ),t.[col1],t.[col2] FROM @表1 t
hery2002 2008-07-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sunshine_os 的回复:]
大哥 你这样 运行的结果是
表1

1 aa aa
2 bb bb
3 cc cc
99 ss sd
100 sa ss

表2
1 xxx xxx
2 xxx xxx
3 xx xxx
199 xx xxx
200 xx xxx


插入后你的结果为
1 xxx xxx
2 xxx xxx
3 xx xxx
199 xx xxx
200 xx xxx
201 xxx xxx
202 xxx xxx
203 xx xxx
399 xx xxx


正确的结果应该为
1 xxx xxx
2 xxx xxx
3 xx xxx
199 xx xxx
200 xx xxx
201 aa aa
202 bb …
[/Quote]
如果不是连续的需要连续地排?
这个简单,加个px即可、
sunshine_os 2008-07-02
  • 打赏
  • 举报
回复
大哥 你这样 运行的结果是
表1

1 aa aa
2 bb bb
3 cc cc
99 ss sd
100 sa ss

表2
1 xxx xxx
2 xxx xxx
3 xx xxx
199 xx xxx
200 xx xxx


插入后你的结果为
1 xxx xxx
2 xxx xxx
3 xx xxx
199 xx xxx
200 xx xxx
201 xxx xxx
202 xxx xxx
203 xx xxx
399 xx xxx


正确的结果应该为
1 xxx xxx
2 xxx xxx
3 xx xxx
199 xx xxx
200 xx xxx
201 aa aa
202 bb bb
203 cc cc
204 ss sd
205 sa ss
hery2002 2008-07-02
  • 打赏
  • 举报
回复
-->生成测试数据


declare @表1 table([mbi_id] int,[col1] nvarchar(2),[col2] nvarchar(2))
Insert @表1
select 1,N'aa',N'aa' union all
select 2,N'bb',N'bb' union all
select 3,N'cc',N'cc' union all
select 99,N'ss',N'sd' union all
select 100,N'sa',N'ss'
--Select * from @表1

declare @表2 table([mbi_id] int,[col1] nvarchar(3),[col2] nvarchar(3))
Insert @表2
select 1,N'xxx',N'xxx' union all
select 2,N'xxx',N'xxx' union all
select 3,N'xx',N'xxx' union all
select 199,N'xx',N'xxx' union all
select 200,N'xx',N'xxx'
--Select * from @表2


INSERT INTO @表2
SELECT ISNULL(( SELECT MAX([mbi_id]) FROM @表2),1) + [mbi_id],[col1],[col2] FROM @表2
-晴天 2008-07-02
  • 打赏
  • 举报
回复
declare @maxid int
select @maxid = max(mbi_id) from 表2
insert into 表2 select mbi_id+@maxid,col1,col2 from 表1

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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