2017-02-15 102 views
2

我正在開發一個我的SSIS項目。我已經成功地將一些CSV加載到我的數據庫中(通過VS中的Integration Services),現在我正試圖在數據庫中創建一個觸發器。T-SQL(SQL Server 2016)觸發列值更改,在插入

我想要發生的事情是:當列second_road_class的列數爲-1時,我希望它變成6.我希望觸發器在插入過程中觸發。

我的觸發器代碼似乎在SSMS中調試正常!但是當我稍後嘗試再次插入csv時,second_road_class列與-1保持原樣。

觸發代碼:

CREATE TRIGGER AccidentsTrigger 
ON [Accidents] 
INSTEAD OF INSERT 
AS BEGIN 
    SET NOCOUNT ON 

    IF (SELECT [second_road_class] FROM INSERTED) LIKE '-1' 
    BEGIN 
     UPDATE [Accidents] 
     SET [second_road_class] = '6' 
     WHERE [second_road_class] = '-1' 
    END 
END 

感謝您的幫助。

+0

這不起作用 - 'INSTEAD OF'的真正含義'INSTEAD OF' - 沒有行更新,因爲觸發器觸發第一個(沒有行將永遠被插入,除非你自己將該行插入到觸發器中)。 「它編譯!」或「它沒有使調試器barf」〜=按預期工作。 –

+0

我真的嘗試了很多解決方法。現在我正在回答下面的問題 – Diaman

回答

1

你可以用after insert觸發器來做到這一點。

create trigger accidentstrigger on [accidents] 
after insert as 
begin; 
    set nocount on; 
    if exists (select 1 from inserted where [second_road_class] = '-1') 
    begin; 
     update a 
     set [second_road_class] = '6' 
     from [accidents] as a 
      inner join inserted i 
      /* change AccidentId to the Primary Key on accidents*/ 
      on a.AccidentId = i.AccidentId 
      and i.[second_road_class] = '-1'; 
    end; 
end; 
go 

使用上rextester的pilots表舉例:http://rextester.com/XKX10184

+0

還沒有。是否有一個問題,我是從數據流從VS IS加載到數據庫的CSV? – Diaman

+1

@MrDiaman如果您手動插入記錄,它可以工作嗎? – SqlZim

+0

似乎必須在軟件包設置中進行一些調整。現在它可以工作。感謝您的幫助! – Diaman