为了账号安全,请及时绑定邮箱和手机立即绑定

请教批量更新数据库方案

请教批量更新数据库方案

12345678_0001 2018-08-20 09:06:02
需求是这样的,要把一批数据导入数据库(约1万条),每一条数据是由几个表的字段组成的,示例如下:表AID A1 A2表BID B1 B2 B3 B4 AID(外键)现在要导入的数据格式为A1 A2 B1 B2 B3 B4请问有没有比较好的解决方案,谢谢!
查看完整描述

2 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

一、可以用游标,一条条insert,每次两个表。

二、关联表更新,增加一个源表主键Xid

 

use testdb2
go
/*******************建立测试数据***3w@live.cn***********************/
IF NOT OBJECT_ID('[TBXXX]') IS NULL
   DROP TABLE [TBXXX]
GO
CREATE TABLE [TBXXX](
[Xid] int identity(1,1) primary key,
[A1] NVARCHAR(20) null,
[A2] NVARCHAR(20) null,
[B1] Nvarchar(10) null,
[B2] NVARCHAR(20) null
)
go

INSERT INTO TBXXX
SELECT 'a1',replicate('A1',6),replicate('B1',4),replicate('B1',5) union ALL
SELECT 'a2',replicate('A2',6),replicate('B2',4),replicate('B2',5) union ALL
SELECT 'a3',replicate('A3',6),replicate('B3',4),replicate('B3',5) union ALL
SELECT 'a4',replicate('A4',6),replicate('B4',4),replicate('B4',5)
go

IF NOT OBJECT_ID('[tbA]') IS NULL
   DROP TABLE [tbA]
GO
CREATE TABLE [tbA](
[Aid] int identity(1,1) primary key,
[A1] NVARCHAR(20) null,
[A2] NVARCHAR(20) null,
[Xid] int null
)
go


IF NOT OBJECT_ID('[tbB]') IS NULL
   DROP TABLE [tbB]
GO
CREATE TABLE [tbB](
[Bid] int identity(1,1) primary key,
[B1] Nvarchar(10) null,
[B2] NVARCHAR(20) null,
[Aid] int null,
[Xid] int null
)
go

insert into [tbA] select A1, A2,XId from [TBXXX]
insert into [tbB] (Aid,Xid) select AID,Xid from [tbA]
----select * FROM [tbB]

update [tbB] SET B1=t.B1,B2=t.B2
FROM [TBXXX] t INNER JOIN [tbB] on t.Xid=[tbB].Xid

ALTER table [tbA]
drop column Xid
GO

ALTER table [tbB]
drop column Xid
GO

SELECT * FROM [tbA]
select * FROM [tbB]


查看完整回答
反对 回复 2018-08-22
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

这个用连表应该可以解决的吧!

查看完整回答
反对 回复 2018-08-22
  • 2 回答
  • 0 关注
  • 651 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信