sql - SSIS 批量插入到单个表中

标签 sql sql-server-2008 ssis

我有一个 SSIS 包,其任务是加载进程外应用程序以将数据批量插入到一个表中。问题是当多个文件同时到达时,多个进程外应用程序将运行。这将导致插入失败。

SQL Server Broker Service 可以对插入数据进行排队吗? SQL Server或SSIS是否有任何机制来处理并发可靠插入?

我使用 SSIS 的执行进程任务来执行批量插入 LINQ to SQL 控制台应用程序

谢谢。

最佳答案

听起来您遇到了超时问题,因为 SSIS 包的第一次运行正在锁定表,而该包的所有其他正在运行的副本都在等待锁被释放。

您可以采取一些措施来确认这一点。首先,在 SQL Server Management Studio (SSMS) 中,打开一个查询窗口,并在出现这种情况时执行命令 EXEC sp_who2。您将在结果中看到 BlkBy 列。该列包含阻止所选进程的 SPID 值。您可能会发现您的程序包的一个实例正在阻止所有其他程序包。

在 SSIS 设计器的数据流任务中,编辑目标组件。有一个“表锁定”复选框。它可能被检查,这告诉进程锁定表,直到数据加载完成。

您有几个选项可以解决这个问题。首先,一个 SSIS 包必须在另一个 SSIS 包启动之前完成数据加载,这一点很重要吗?如果答案为“否”,则您可以取消选中“目标”组件中的“表锁定”选项。这将允许 SQL Server 管理同时的数据加载。

如果您必须让一个包在其他包运行之前完成,那么您可能需要创建一项 SSIS 任务来检查该表是否可用于加载。如果正在加载表,则停止 SSIS 包并稍后重新检查。您甚至可以在控制台应用程序中处理此问题。

SQL Server 没有任何内置方法来执行此操作,并且代理服务听起来比您需要的工作量更多。

关于sql - SSIS 批量插入到单个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3893574/

相关文章:

mysql - 按日期订购 2 张 table

mysql - 删除行并比较月份

sql - Microsoft SQL服务器

sql-server - 限制服务器端返回的行数(强制限制)

c# - 事务和锁

sql-server - SSIS - 任务分组和序列任务有什么区别?

sql - SSIS - 在另一个表上执行查找以获取相关列

mysql - 如何在SQL中选择需要的信息?

ssis - 在连接表达式中插入用户变量时出现问题

sql - 有什么办法可以将下面嵌套的json数据插入到sql server中