2017-02-16 48 views
0

我正在创建一个SSIS包。 在这个包中我有一个数据流,我在其中插入一个数据库(目标)一个CSV(源)。在SSIS包中触发触发器时出错(SQL Server 2016)

该软件包完美工作。 当我尝试同时触发触发器时,会发生此问题。要做到这一点,我正在编辑目标组件的属性。特别是在性能我加入,FIRE_TRIGGERS波纹管:

FastLoadOptions | TABLOCK,CHECK_CONSTRAINTS,FIRE_TRIGGERS 

现在,当我运行包我得到以下错误:

[OLE DB Destination [139]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005. An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "The statement has been terminated.". An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.".

我跟着这篇文章Unable to access sql server configuration manager和我简单地执行下面的命令from Admin-CMD(我有SQL Server 2016)

cd "C:\Program Files (x86)\Microsoft SQL Server\140\Shared" Then Run : mofcomp sqlmgmproviderxpsp2up.mof

但仍然没有。

感谢您的帮助!

我的系统:Windows10时,SQL Server 2016的Visual Studio 2015年

编辑:触发代码如下:

DROP TRIGGER IF EXISTS AccidentsTrigger 
GO 
USE SSIS_db; 
GO 
CREATE TRIGGER AccidentsTrigger 
ON [Accidents] 
AFTER INSERT AS 
BEGIN; 
    SET NOCOUNT ON; 
    IF (SELECT [second_road_class] FROM INSERTED) LIKE '-1' 
    BEGIN; 
     UPDATE a 
     SET [second_road_class] = '6' 
     FROM [Accidents] AS a 
      INNER JOIN INSERTED i ON a.accident_index = i.accident_index AND i.[second_road_class] = '-1'; 
    END; 
END; 
GO 
+0

错误消息告诉你到底发生了什么问题。如果您仍然需要帮助查找错误,则需要发布触发器代码。 –

+0

我没有发布触发器代码,因为当我通过SSMS执行一个简单的插入时,一切都工作正常! 更新:我编辑原始帖子并包含触发代码。 编辑:触发器确实有问题。我用一行测试它,但是对于多行它有故障。 – Diaman

回答

0

显然出现了两个错误。多行触发器的结果以及SQL Server代理程序处于手动状态的事实默认启动(它需要处于“自动”状态)。可以通过SQL Server配置管理器访问SQL Server代理服务。