标签: bulk

批量插入 - 最佳用法

我需要将 1.5 亿行只有 int/bigint 列从一个 SQL 实例导出到另一个。我使用 BCP queryout 导出行和 BULK INSERT 将行导入另一个表。

我将 1.5 亿行拆分为 3 个 BCP 导出文件,每个文件有 5000 万行和 3 个 BULK INSERTS。它有效(15 分钟 BCP 输出/40 分钟批量插入),但我宁愿只导出一个文件并导入一个文件。

这在技术上是可行的,还是我可能会遇到大量行的问题?我从未从 BCP 文件中导入超过 5000 万行,我不确定这如何解决。BCP 导出或导入有限制吗?

谢谢,

sql-server-2008 insert bcp bulk

5
推荐指数
1
解决办法
2592
查看次数

使用检查点与 GO

通常,当开发人员或数据分析师之一需要执行非常大的数据更新或删除时(其中截断或截断/插入没有意义,因为要保留的数据集太大)我建议他们这样做类似于以下内容:

-- Delete 1 million rows 1 thousand at a time
DELETE TOP (1000) FROM TableA WHERE <condition>
WAITFOR DELAY '00:00:01'
GO 1000
Run Code Online (Sandbox Code Playgroud)

对处于完全恢复模式的数据库执行此操作的结果是 1) 等待允许其他事务在需要时进行处理 2) 当日志备份运行时,它能够在日志文件中将已完成的操作标记为脏操作可以复用空间,防止日志增长过快。

而不是这样做,我想知道是否可以使用检查点完成同样的事情。这句话是否会有效地导致同样的情况发生?

-- Delete 1 million rows 1 thousand at a time
WHILE EXISTS ( SELECT 1 FROM TableA WHERE <condition> )
BEGIN
DELETE TOP (1000) FROM TableA WHERE <condition>
WAITFOR DELAY '00:00:01'
CHECKPOINT
END
Run Code Online (Sandbox Code Playgroud)

同样,这些是处于完全恢复模式的数据库。

sql-server delete bulk checkpoint

5
推荐指数
1
解决办法
948
查看次数

如何将重复的大时间序列发送+更新到 SQL 服务器

我使用 SQL Server 2008 我想发送(并更新重复的日期时间索引)一个大的时间序列(超过 1000 个数据点,最终远不止这些)。这样做的最佳方法是什么?我被建议使用

合并

批量插入

但,

  1. 我们可以同时使用 2 吗?
  2. 我不想先将数据保存到文件中。它已经在内存中,为什么我必须先将它保存到文件中?另外,我可以让多个线程同时调用此方法,这会有点混乱。

欢迎任何建议

sql-server bulk

4
推荐指数
1
解决办法
469
查看次数

查询表时 SQL Server 大容量复制是否会导致超时

在 SQL Server 2008 R2 中,使用BulkCopy上传数千行数据会导致在同一张表上进行查询时出现问题吗?

特别是它会导致查询超时吗?

被查询的表有数百万行。

sql-server bulk

4
推荐指数
1
解决办法
1667
查看次数

删除聚簇索引后,仍然在尝试做聚簇插入

我正在尝试将数据从一个数据库系统转换为另一个数据库系统。我需要传输和格式化的表之一包含超过 1000 万行。

我正在运行以下脚本来做到这一点:

USE [Cvti101687]
go
truncate table [IDAT_MR_NOTEHISTORY]
go
IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[IDAT_MR_NOTEHISTORY]') AND name = N'PK_iMR_NOTES')
    ALTER TABLE [dbo].[IDAT_MR_NOTEHISTORY] DROP CONSTRAINT [PK_iMR_NOTES]
GO
USE [101687_test2]
GO

declare @ChunkCounter int
declare @ChunkSize int
set @ChunkCounter = 0
set @ChunkSize = 50000

--hack to do a do-while loop in sql
while 1 = 1
begin
    insert into cvti101639..IDAT_MR_NOTEHISTORY with (tablock)
    SELECT newid(), '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000000'
    ,'00000000-0000-0000-0000-000000000000',    ISNULL(TargetClientAccountNum, [REC_CLINUM]), ISNULL(TargetPetAccountNum, '     ')
    ,ISNULL(pck_desc, 'Converted …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server clustered-index insert bulk

2
推荐指数
1
解决办法
164
查看次数

如何在临时表中插入大量数据?

我正在构建一个程序,它以以下形式生成 T-SQL 查询:

DECLARE @In TABLE (Col CHAR(20))
INSERT INTO @In VALUES value1, value2... value1000
GO
INSERT INTO @In VALUES value1001, value1002...
Run Code Online (Sandbox Code Playgroud)

但第二条INSERT语句抛出错误:

消息 1087,级别 15,状态 2,第 1 行
必须声明表变量“@In”。

我究竟做错了什么?

insert bulk t-sql

2
推荐指数
1
解决办法
4万
查看次数