2017-02-16 235 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代理服務。