2017-12-13 17 views
0

挿入および更新後にトリガーを作成する必要があります。新しい行がテーブルに挿入されている場合は、挿入トリガーの後に実行し、タイムスタンプを他のテーブルに挿入する必要があります。しかし、この行が再び編集されると、もう一方の表も更新されます。挿入後および更新後のSQL Serverトリガー

ステータスをアクティブ、ペンディングなどに変更することができます。したがって、ステータスが変わるたびに、タイムスタンプを設定する必要があります。新しいレコードごとに、新しい行を入れる必要があります。ここで

は、テーブル構造である:

| ID | Name | Status | 
|----|------|--------| 
| 1 | xyz | Active | 
| |  |  | 
| |  |  | 

のは、これが表に挿入された新しい行であるので、それは別のテーブルに挿入する必要があるとしましょう。しかし、私はその状態を変更すると、このIDに対して他のテーブルを更新する必要があります。

| ID | Name | Active Staus | Other Status | 
|----|------|--------------|--------------| 
| 1 | xyz | TimeStamp | Time Stamp | 
| |  |    |    | 
| |  |    |    |` 


USE [DemoDB] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER TRIGGER [dbo].[test_INSERT] 
     ON [dbo].[Demo] 
AFTER INSERT 
AS 
BEGIN 
     SET NOCOUNT ON; 

     DECLARE ID BIGINT 
     Declare @status varchar(50) 
     SELECT @ID = INSERTED.ID 

     FROM INSERTED 

     INSERT INTO [dbo].[LogTble] 
     VALUES(@ID,'timestamp') 
END 
+0

??:

はこれを試してみてくださいあなたはどこにいるのですか? –

+0

私はちょうど簡単な挿入をしました。私はそれをどのように達成できるのか分かりません。 – ROMA

答えて

0

よく、トリガーが途中にあります。

あなたはInsertedで一つだけの行があることをを想定している - これは、一般的にそうではないです!あなたのINSERT文が複数の行を挿入した場合は、Insertedに複数のエントリが存在しますと、このようなコード:

SELECT @ID = INSERTED.ID FROM INSERTED 

が無残に失敗します ....選択した1 arbitary行を取得します - 他のすべては無視されますセット・ベースの方法で - ....

あなたはInsertedが複数の行にが含まれていますし、あなたがそれに応じてトリガーを記述する必要があることに注意する必要があります。だから、あなたがこれまでにあなたのトリガとして何を書かれている

ALTER TRIGGER [dbo].[test_INSERT] 
ON [dbo].[Demo] 
AFTER INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO [dbo].[LogTble] (Id, ActiveStatus) 
     SELECT i.ID, SYSDATETIME() 
     FROM Inserted i 
END 
+0

誰かが行を更新するとどうなりますか?私はまた、更新のトリガー – ROMA

+0

誰かのステータスを更新する必要があります。そのステータスに基づいて私はタイムスタンプを他のテーブルに置く必要があります。アクティブな状態の変化は保留中です。今私は他のテーブルの保留中の列にタイムスタンプを入れたい – ROMA

+0

@ROMA:よく私の挿入トリガーを取って、それをアップデートケースに適応させる - あなたも**自分で何かをする必要がある!!私たちはお手伝いしますが、あなたの要件に合わせてコードを書くだけではありません。 –

関連する問題