2017-02-15 2 views
2

私のSSISプロジェクトで作業しています。私は正常にいくつかのcsvを(VSのIntegration Servicesを通して)私のデータベースにロードすることに成功しました。そして今、私はデータベースにトリガーを作成しようとしています。T-SQL(SQL Server 2016)列値のトリガ、挿入時に変更する

私がしたいことは:列番号second_road_classが-1のとき、私は6に変えたいと思います。挿入中にトリガーを発射したいです。

私のトリガコードはSSMSで正常にデバッグするようです!しかし、後でcsvをもう一度挿入しようとすると、-1second_road_class列はそのままの状態になります。

トリガーコード:任意の助け

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' - 更新する行が存在しない第1トリガ起動ので(なしトリガーに自分自身を挿入しない限り行は挿入されません)。 "それはコンパイルされました!"または "デバッガをバーフにしませんでした"〜=意図したとおりに動作します。 –

+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

まだ何も。問題はありますか?CSVをVSからISにデータフローでロードしていますか? – Diaman

+1

@MrDiaman手動でレコードを挿入すると機能しますか? – SqlZim

+0

パッケージの設定で調整が必要なようです。今それは動作します。お手伝いありがとう! – Diaman

関連する問題