求一sql语句或存储过程!主表明细表的插入

时间:2022-02-19 23:38:17
两个数据库 A_real,A_simu 表的结构完全相同
A_real的错误数据,已经删除
要求 把 A_simu中的数据导到A_real 中

worklog 主表
wl_id(主键,自动增加)   emp_id    
  3                      2
  8                      3

wl_items 明细表
item_id(主键,自动增加)   wl_id(外键)  type
 12                           3         a
 16                           3         b  
 22                           8         a
 24                           8         f  
 32                           8         g
注意:插入后要保持主表和明细表的数据对应关系
谢谢,各位! 

13 个解决方案

#1


SQL SERVER 的企业管理器, 直接导过去不就OK了

#2


上面的数据是A_simu 中,要保持其主表和明细表的对应关系!
把数据导到A_real中!

#3


insert into worklog(emp_id) select max(empid)+1 from worklog
insert into wl_items(wl_id,type) select id=(select max(wl_id)+1 from worklog),type from A_simu

#4


两个数据库,这两个表都还有其他数据呢!
上面只列出A_simu中需要倒入A_real中的数据!
这只是表中的一部分!我只要导入显示的数据!

#5


生成sql脚本,注意在生成的时候得选项
然后再在另外的数据库执行

#6


打开备份库 执行
EXPORT TO ./data/表名.IXF OF IXF MESSAGES ./exportmsgs.txt SELECT * FROM 表名

打开正式库 执行
delete from  表名;
IMPORT FROM ./data/表名.IXF OF IXF MESSAGES ./exportmsgs.txt INSERT INTO  表名;

#7


我先吃饭去,大家帮忙看看!

#8


保持主从关系对应呀!比如
在A_simu 的 worklog主表  wl_id     emp_id
                          3          2
         work_items从表  item_id   wl_id  type
                           12        3     a
                           16        3     b
导到A_real中 可能就成了
             worklog主表  wl_id
                           41  
           work_items从表  item_id   wl_id  type
                           56        41     a
                           57        41     b

#9


有个高手给我写 ,没有成功!大家帮忙看看!?
declare @wl_id int
declare @emp_id int
declare @id int

DECLARE worklog_cursor CURSOR FOR
SELECT * FROM  worklog
--这里可以加查询条件

open worklog_cursor

FETCH NEXT FROM worklog_cursor
into @wl_id,@emp_id

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
   -- This is executed as long as the previous fetch succeeds.
   insert into [目标数据库名].dbo.worklog(emp_id) values(@emp_id)

   select @id=SCOPE_IDENTITY() 
   insert into [目标数据库名].dbo.wl_items(wl_id,type) select @id as wl_id,type from wl_items b where b.wl_id=@wl_id

  FETCH NEXT FROM worklog_cursor into @wl_id,@emp_id
END

CLOSE worklog_cursor
DEALLOCATE worklog_cursor
GO

#10


相应我最敬爱,漂亮,温柔的姐姐的号召,来顶一下


可怜的姐姐三次了:)

#11


先谢过,我小弟了!
我用的系统是WIN 2000 SERVER
数据库SQL Server 2000
大家,积极回答呀!分不够我可以再加的!
如果有什么更好的解决方案,也可指点思路!  救命了,很着急用的!

#12


要的比较紧,暂时写了段程序,把数据改了过来,运行速度比较慢。
我觉得这个问题,只用sql语句,就能解决的。????????????????????

#13


IDENTITY_INSERT = on

强制按照主键值插入(取消自递增的功能)

#1


SQL SERVER 的企业管理器, 直接导过去不就OK了

#2


上面的数据是A_simu 中,要保持其主表和明细表的对应关系!
把数据导到A_real中!

#3


insert into worklog(emp_id) select max(empid)+1 from worklog
insert into wl_items(wl_id,type) select id=(select max(wl_id)+1 from worklog),type from A_simu

#4


两个数据库,这两个表都还有其他数据呢!
上面只列出A_simu中需要倒入A_real中的数据!
这只是表中的一部分!我只要导入显示的数据!

#5


生成sql脚本,注意在生成的时候得选项
然后再在另外的数据库执行

#6


打开备份库 执行
EXPORT TO ./data/表名.IXF OF IXF MESSAGES ./exportmsgs.txt SELECT * FROM 表名

打开正式库 执行
delete from  表名;
IMPORT FROM ./data/表名.IXF OF IXF MESSAGES ./exportmsgs.txt INSERT INTO  表名;

#7


我先吃饭去,大家帮忙看看!

#8


保持主从关系对应呀!比如
在A_simu 的 worklog主表  wl_id     emp_id
                          3          2
         work_items从表  item_id   wl_id  type
                           12        3     a
                           16        3     b
导到A_real中 可能就成了
             worklog主表  wl_id
                           41  
           work_items从表  item_id   wl_id  type
                           56        41     a
                           57        41     b

#9


有个高手给我写 ,没有成功!大家帮忙看看!?
declare @wl_id int
declare @emp_id int
declare @id int

DECLARE worklog_cursor CURSOR FOR
SELECT * FROM  worklog
--这里可以加查询条件

open worklog_cursor

FETCH NEXT FROM worklog_cursor
into @wl_id,@emp_id

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
   -- This is executed as long as the previous fetch succeeds.
   insert into [目标数据库名].dbo.worklog(emp_id) values(@emp_id)

   select @id=SCOPE_IDENTITY() 
   insert into [目标数据库名].dbo.wl_items(wl_id,type) select @id as wl_id,type from wl_items b where b.wl_id=@wl_id

  FETCH NEXT FROM worklog_cursor into @wl_id,@emp_id
END

CLOSE worklog_cursor
DEALLOCATE worklog_cursor
GO

#10


相应我最敬爱,漂亮,温柔的姐姐的号召,来顶一下


可怜的姐姐三次了:)

#11


先谢过,我小弟了!
我用的系统是WIN 2000 SERVER
数据库SQL Server 2000
大家,积极回答呀!分不够我可以再加的!
如果有什么更好的解决方案,也可指点思路!  救命了,很着急用的!

#12


要的比较紧,暂时写了段程序,把数据改了过来,运行速度比较慢。
我觉得这个问题,只用sql语句,就能解决的。????????????????????

#13


IDENTITY_INSERT = on

强制按照主键值插入(取消自递增的功能)