【发布时间】:2014-07-24 13:20:18
【问题描述】:
我正在构建一个 C# 控制台应用程序,该应用程序将在我们要传输大量员工数据的场景中由 SQL Server 代理执行:
从一个 SQL Server 实例到另一个 SQL Server 实例的两个不同网络上具有相同架构的两个员工表之间。
在同一个 SQL Server 实例上的两个员工表之间(没有网络延迟),一个表是临时表,另一个是仓库。
该过程是连续的,因此 ETL 作业必须先传输 #1,然后传输 #2。
考虑到进程 #1 是跨网络的,而进程 #2 涉及在将新数据传输到目标表之前删除目标表,我想知道采用什么最佳策略才能获得最佳性能。
这是我的想法:
流程 #2:
BEGIN TRANSACTION EmployeesInsert
WITH MARK N'Transfering employees from Staging to Warehouse';
GO
USE CorporateWarehouse;
GO
DELETE FROM CorporateWarehouse.WarehouseEmployee
INSERT INTO CorporateWarehouse.WarehouseEmployee
(FirstName,
LastName,
Address,
PhoneNumber)
SELECT FirstName,
LastName,
Address,
PhoneNumber
FROM CorporateWarehouse.StagingEmployee
GO
COMMIT TRANSACTION EmployeesInsert;
GO
【问题讨论】:
-
您是否有理由不使用 SSIS 或 BCP 进行批量加载?
-
客户端未使用该技术
-
您的 DELETE 语句会触发任何触发器吗?如果不是,为什么不使用
TRUNCATE TABLE CorporateWarehouse.WarehouseEmployee -
@DanielE。好点,我肯定会改用“TRUNCATE TABLE”
-
你能做一个“链接服务器”吗?快多了。我们每天在大约 13 秒内通过 Internet 连接将 4 个不同表中的大约 400 万条记录传输到另一个站点。这比我们过去对文件所做的事情要好得多。糟糕!
标签: c# sql tsql etl staging-table