我目前正在合并Windows Azure SQL Database中的大型数据集。我想知道是否有办法不出现以下错误:
40552 : 由于事务日志空间使用过多,会话已终止。尝试在单个事务中修改更少的行。
我的数据集超过 1500 万条记录。
我目前正在合并Windows Azure SQL Database中的大型数据集。我想知道是否有办法不出现以下错误:
40552 : 由于事务日志空间使用过多,会话已终止。尝试在单个事务中修改更少的行。
我的数据集超过 1500 万条记录。
从应用程序中找到需要导入的记录数,并根据批处理大小计算需要执行的批处理数。然后对于每个批次,创建一个新的 SQL 命令,该命令执行具有正确偏移索引的合并存储过程。确保在每个 SQL 命令之间插入一个短暂的延迟,因为如果它们运行得太快,Windows Azure SQL 数据库可能会由于请求数量过多而引发40501 。
CREATE PROCEDURE [dbo].[MergeCustomerTables]
@offsetIndex int = 0,
@batchSize int = 10000
AS
DECLARE @offset as bigint
SELECT @offset = @offsetIndex * @batchSize
MERGE Customers AS Target
USING (SELECT a.[Name], a.[LastName], a.[Email] from CustomerInsertTable as a
ORDER BY a.[Email]
OFFSET @offset ROWS
FETCH NEXT @batchSize ROWS ONLY
) AS Source
ON (Target.[Email] = Source.[Email])
WHEN MATCHED THEN
UPDATE SET Target.[Name] = Source.[Name]
, Target.[LastName] = Source.[LastName]
WHEN NOT MATCHED BY TARGET THEN
INSERT ([Name], [LastName], [Email])
VALUES (
Source.[Name]
, Source.[LastName]
, Source.[Email]
);