java插入时间 mssql_MSSQL 2017 - 有效插入大型数据集

我试图使用C#应用程序从CSV文件中插入大量数据(大约一百万行)到具有四个表的数据库中 . 在CSV文件中,由于复制主键而导致大约25%的行错误,并且每行被分解为四个表 . 从CSV插入行是通过使用try-catch语句打包到事务中的四个过程(每个用于一个表)完成的 . 插入10000行大约需要一分钟,所以它太长了 . 是否存在任何更快的方法来插入大型数据集并持续检查数据一致性?谢谢 .

编辑:这是我的程序代码

USE semestralka

GO

CREATE PROCEDURE sp_vloz_ridice @crp nchar(9), @jmeno varchar(50)

AS

BEGIN

IF NOT EXISTS

(SELECT crp, jmeno FROM ridici

WHERE crp = @crp AND jmeno = @jmeno)

INSERT INTO ridici (crp, jmeno)

VALUES (@crp, @jmeno)

END

USE semestralka

GO

CREATE PROCEDURE sp_vloz_auto @SPZ nchar(8), @barva int, @vyrobce nvarchar(25), @model nvarchar(40)

AS

BEGIN

IF NOT EXISTS

(SELECT SPZ, barva, vyrobce, model FROM auta

WHERE SPZ = @SPZ AND barva = @barva AND vyrobce = @vyrobce AND model = @model)

INSERT INTO auta (SPZ, barva, vyrobce, model)

VALUES (@SPZ, @barva, @vyrobce, @model)

END

USE semestralka

GO

CREATE PROCEDURE sp_vloz_branu @brana_jmeno nchar(10), @typ varchar(10), @cena real, @gps_lattitude real, @gps_longtitude real

AS

BEGIN

IF NOT EXISTS

(SELECT jmeno, typ, cena, gps_lattitude, gps_longtitude FROM brany

WHERE jmeno = @brana_jmeno AND typ = @typ AND cena = @cena AND gps_lattitude = @gps_lattitude AND gps_longtitude = @gps_longtitude )

INSERT INTO brany (jmeno, typ, cena, gps_lattitude, gps_longtitude)

VALUES (@brana_jmeno, @typ, @cena, @gps_lattitude, @gps_longtitude)

END

USE semestralka

GO

CREATE PROCEDURE sp_vloz_prujezd @prujezd_datum_cas int, @fk_prujezd_spz nchar(8), @fk_prujezd_crp nchar(9), @fk_gps_lattitude real, @fk_gps_longtitude real, @tachometr_stav int, @palivo_stav real, @napeti_baterie real

AS

BEGIN

INSERT INTO prujezdy (prujezd_datum_cas, fk_prujezd_spz, fK_prujezd_crp, fk_gps_lattitude, fk_gps_longtitude, tachometr_stav, palivo_stav, napeti_baterie)

VALUES (@prujezd_datum_cas, @fk_prujezd_spz, @fK_prujezd_crp, @fk_gps_lattitude, @fk_gps_longtitude, @tachometr_stav, @palivo_stav, @napeti_baterie)

END

USE semestralka

GO

CREATE PROCEDURE sp_super_insert @SPZ nchar(8), @barva int, @vyrobce nvarchar(25), @model nvarchar(40),

@crp nchar(9), @jmeno varchar(50),

@brana_jmeno nchar(10), @typ varchar(10), @cena real, @gps_lattitude real, @gps_longtitude real,

@prujezd_datum_cas int, @tachometr_stav int, @palivo_stav real, @napeti_baterie real, @output bit OUTPUT

AS

BEGIN

SET @output = 0

BEGIN TRANSACTION

BEGIN TRY

EXEC sp_vloz_auto @SPZ, @barva, @vyrobce, @model

EXEC sp_vloz_ridice @crp, @jmeno

EXEC sp_vloz_branu @brana_jmeno, @typ, @cena, @gps_lattitude, @gps_longtitude

EXEC sp_vloz_prujezd @prujezd_datum_cas, @SPZ, @crp, @gps_lattitude, @gps_longtitude, @tachometr_stav, @palivo_stav, @napeti_baterie

END TRY

BEGIN CATCH

ROLLBACK TRANSACTION

RETURN @output

END CATCH

COMMIT TRANSACTION

SET @output = 1

RETURN @output

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值