3

我在 SSIS 中有一个执行 SQL 步骤,该步骤与以下错误不一致:

[执行 SQL 任务] 错误:执行查询“sp name”失败,出现以下错误:“语句已终止。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或连接未正确建立。

存储过程会截断一个表,然后使用 tabblock 将数据插入其中。它没有参数化并且不返回记录集。

  • 存储过程在 SSMS 中成功执行。
  • 我在 Visual Studio 中的用户下以调试模式运行 SSIS。
  • 我在这个本地桌面开发框中有系统管理员。
  • 这四个任务中的任何一个都可能失败。
  • 如果容器独立于包的其余部分执行,则它可以工作。
  • 连接字符串是与同一框上的数据库的 ole db 连接。

发生这种情况的流程如下所示,所有四个都调用不同但相似的过程,它们都将数据从同一个表加载到四个不同的目标中:

在此处输入图像描述

其他信息:

  • SQL Server 2016 SP1,开发者版
  • 视窗 8.1

编辑:

存储过程是这样的:

create or alter myprocedure as

truncate table mytable

insert into mytable with (tablock) 
(col1,col2,col3,col4,col5 ... col30)
select 
   try_cast(col1 as something) as col1
    ,try_cast(col2 as something) as col2
    ,try_cast(col3 as something) as col3
    ,col4
    ,col5
    ...
    ,col30
from
   myothertable

编辑:我有另一个几乎相同的过程 - 除非它针对不同的文件进行导入。它没有问题。文件更小 10GB 与 15GB。

编辑:SQL 错误日志中有一些堆栈转储:

  • 开始堆栈转储:
  • 2017 年 3 月 4 日 17:39:43 spid 11668
    • 位置:AllocPageRef.cpp:2436
  • 表达式:IAM_START_PGID (ext_id, ext_size) == startExtId
  • SPID:77
  • 进程 ID:7836
  • 描述:在错误的 IAM 页面中查找范围
    • 输入缓冲区 70 字节 -
  • 执行 my_sp

是时候运行更多 DBCC 命令了。

4

1 回答 1

0

您是否在任何其他程序中引用“myothertable”?你检查过包和容器的默认事务处理是如何设置的吗?如果您正在使用 tabblock 并且在嵌套事务中,就像所有默认情况一样,您可能会立即死锁。

于 2018-06-11T18:50:10.913 回答