【发布时间】:2019-05-05 04:54:23
【问题描述】:
我正在为仓库实施一种新方法。新方法包括在源表和目标表之间执行增量加载(插入、更新或删除)。
所有表都运行良好,除了 1 个表,其 Source 的行数超过 300 万行,如下图所示,它刚刚开始运行,但从未完成。 可能我没有以正确的方式进行更新,或者有其他方法可以做到这一点。
突出显示的对象是它挂起的地方。 这是我调用来更新表的存储过程:
ALTER PROCEDURE [dbo].[UpdateDim_A]
@ID INT,
@FileDataID INT
,@CategoryID SMALLINT
,@FirstName VARCHAR(50)
,@LastName VARCHAR(50)
,@Company VARCHAR(100)
,@Email VARCHAR(250) AS BEGIN
SET NOCOUNT ON;
BEGIN TRAN
UPDATE DIM_A
SET
[FileDataID] = @FileDataID,
[CategoryID] = @CategoryID,
[FirstName] = @FirstName,
[LastName] = @LastName,
[Company] = @Company,
[Email] = @Email
WHERE PartyID=@ID
COMMIT TRAN; END
注意: 我已经尝试过删除约束和索引并将数据库的恢复模式更改为简单。
任何帮助将不胜感激。
应用@Prabhat G 提供的解决方案后,这是我的包的样子,运行时间为 39 秒(平均)!!!
【问题讨论】:
-
这实际上是你正在做的最慢的方法。排序...单行更新。每次我打开别人的包裹看到这个我都会呻吟。将数据加载到临时表中并进行一次更新。不要按照你的方式去做。
标签: sql sql-server tsql stored-procedures ssis