关于主从表中插入记录的问题
我现在 有 a ,b,c 3个表 ,b和c是主从表
a 里面 有 id ,name ,code
b里面有 guid,name,code
c 里面 有 guid, bid, name,code
现在 我要把 a 里面记录插入 到b 里面 再插入 到c里面去
a 里面有 如下几条记录
1 张三 001
2 李四 002
3 王五 003
4 赵六 004
那 b里面应该是
1 张三 001
2 李四 002
3 王五 003
4 赵六 004
c 里面 会是
1 1 李四 002
2 1 王五 003
3 1 赵六 004
4 2 张三 001
5 2 王五 003
6 2 赵六 004
7 3 张三 001
8 3 李四 002
9 3 赵六 004
10 4 张三 001
11 4 李四 002
12 4 王五 003
求 存储过程 。
主从 存储
[解决办法]
create table a
(id int, name varchar(10), code varchar(10))
create table b
(guid int, name varchar(10), code varchar(10))
create table c
(guid int, bid int, name varchar(10), code varchar(10))
insert into a
select 1,'张三','001' union all
select 2,'李四','002' union all
select 3,'王五','003' union all
select 4,'赵六','004'
-- 插入b表
insert into b(guid,name,code)
select id,name,code from a
-- 插入c表
insert into c(guid,bid,name,code)
select row_number() over(order by getdate()) 'rn',
y.id,x.name,x.code
from a x
cross join a y
where x.id<>y.id
-- 结果
select * from b
/*
guid name code
----------- ---------- ----------
1 张三 001
2 李四 002
3 王五 003
4 赵六 004
(4 row(s) affected)
*/
select * from c
/*
guid bid name code
----------- ----------- ---------- ----------
1 1 李四 002
2 1 王五 003
3 1 赵六 004
4 2 张三 001
5 2 王五 003
6 2 赵六 004
7 3 张三 001
8 3 李四 002
9 3 赵六 004
10 4 张三 001
11 4 李四 002
12 4 王五 003
(12 row(s) affected)
*/
INSERT INTO b([guid], name, code)
SELECT
ROW_NUMBER() OVER(ORDER BY a.id),
a.NAME,
a.code
FROM a
WHERE NOT EXISTS
(
SELECT 1
FROM b
WHERE b.NAME = a.NAME
AND b.code = a.code
)
INSERT INTO dbo.c([guid], bid, name, code)
SELECT
ROW_NUMBER() OVER(ORDER BY m.[guid]),
m.[guid],
n.NAME,
n.code
FROM dbo.b m
INNER JOIN dbo.b n
ON m.NAME<>n.NAME
AND m.code <> n.code
create table A(id int,name varchar(10),code varchar(10))
create table B([guid] int,name varchar(10),code varchar(10))
create table C([guid] int identity(1,1),bid int,name varchar(10),code varchar(10))
insert into A
select 1,'张三','001'
union all select 2,'李四','002'
union all select 3,'王五','003'
union all select 4,'赵六','004'
insert into B
select 1,'张三','001'
union all select 2,'李四','002'
union all select 3,'王五','003'
union all select 4,'赵六','004'
create proc proc_test
as
set nocount on
declare @id int,@maxid int
declare @i int
set @i=1
declare cur cursor for select id from a
open cur
fetch next from cur into @id
while @@fetch_status = 0
begin
insert into c(bid,name,code)
select @i,name,code
from b
where [guid]<>@id
fetch next from cur into @id
set @i=@i+1
end
close cur
deallocate cur
go
exec proc_test
/*
drop proc proc_test
drop table A,B,C
*/
select * from C
/*
guidbidnamecode
11李四002
21王五003
31赵六004
42张三001
52王五003
62赵六004
73张三001
83李四002
93赵六004
104张三001
114李四002
124王五003
*/