2016-08-13 8 views
-1

を実装する:ここでは、テーブルがどのように見えるかトラブルシューティングは、私は、この表には<code>InspectionsReview</code>と呼ばれていたSQL Serverトリガ

CREATE TABLE InspectionsReview 
(
    ID int NOT NULL AUTO_INCREMENT, 
    InspectionItemId int, 
    SiteId int, 
    ObjectId int, 
    DateReview DATETIME, 
    PRIMARY KEY (ID) 
); 

+----+------------------+--------+-----------+--------------+ 
| ID | InspectionItemId | SiteId | ObjectId | DateReview | 
+----+------------------+--------+-----------+--------------+ 
| 1 | 3    | 3  | 3045  | 20-05-2016 | 
| 2 | 5    | 45 | 3025  | 01-03-2016 | 
| 3 | 4    | 63 | 3098  | 05-05-2016 | 
| 4 | 5    | 5  | 3041  | 03-04-2016 | 
| 5 | 3    | 97 | 3092  | 22-02-2016 | 
| 6 | 1    | 22 | 3086  | 24-11-2016 | 
| 7 | 9    | 24 | 3085  | 15-12-2016 | 
+----+------------------+--------+-----------+--------------+ 

私は新しい行がに挿入される前にチェックするトリガーを作成する必要がありますテーブルに既に列値 'ObjectId'と 'DateReview'が挿入されている行の列値と等しい行を持っている場合、それが等しい場合は終了行のIDを取得して配置する必要がありますduplicateと呼ばれるトリガー変数。例えば

、挿入されなければならない新たな行がある場合:

INSERT INTO InspectionsReview (InspectionItemId, SiteId, ObjectId, DateReview)] 
VALUES (4, 63, 3098, '05-05-2016'); 

InspectionsReview表の行は、IDたので、SQL Serverのトリガーに重複する変数は3

に等しくなければなりません= 3は、挿入する必要がある新しい行と同じ値であるObjectIdDateReviewの値を持ちます。これをどのように実装できますか?

+0

ているのですか?それはアイデンティティのですか? – TheGameiswar

+0

この部分もクリアされていません.. "私は行のIDを取得し、重複と呼ばれるトリガに配置したい"サンプルの期待出力を表示してください – TheGameiswar

+0

この部分は "私は新しい検査レビューに挿入された行 "と"これがあれば、行のIDを取得し、それを重複と呼ばれるトリガに置く "とします。 **挿入する前に**チェックを行うと、別のテーブルに挿入するためにIDをどのように取得できますか? – DVT

答えて

0

重複をすべて別のテーブルに記録したいという前提で、私の解決策は、重複をチェックしてログテーブルに挿入するAFTERトリガーを作成することです。 もちろん、これが解決策であるかどうかは、余分な前提が有効かどうかによって異なります。

ここに私のロギングテーブルがあります。ここで

CREATE TABLE dbo.InspectionsReviewLog (
    ID int 
    , ObjectID int 
    , DateReview DATETIME 
    , duplicate int 
); 

は、ID列のデータ型が何であるかをトリガー(余分な仮定とかなり簡単)

CREATE TRIGGER tr_InspectionsReview 
ON dbo.InspectionsReview 
AFTER INSERT 
AS 
BEGIN 
    DECLARE @tableVar TABLE(
     ID int 
     , ObjectID int 
     , DateReview DATETIME 
    ); 

    INSERT INTO @tableVar (ID, ObjectID, DateReview) 
    SELECT DISTINCT inserted.ID, inserted.ObjectID, inserted.DateReview 
    FROM inserted 
     JOIN dbo.InspectionsReview ir ON inserted.ObjectID=ir.ObjectID AND inserted.DateReview=ir.DateReview AND inserted.ID <> ir.ID; 

    INSERT INTO dbo.InspectionsReviewLog (ID, ObjectID, DateReview, duplicate) 
    SELECT ID, ObjectID, DateReview, 3 
    FROM 
     @tableVar; 


END; 
関連する問題