首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于主从表中插入记录的有关问题

2013-09-06 
关于主从表中插入记录的问题我现在 有 a ,b,c 3个表 ,b和c是主从表a 里面 有 id ,name ,code b里面有guid,

关于主从表中插入记录的问题
我现在 有 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
*/


[解决办法]
所谓存储过程,也就是组织好的SQL组合吧
先想好三个SQL,再弄到一起

热点排行