2016-08-01 4 views
0

データを取得するトリガーを作成しようとすると、挿入されるはずの列に置き換えてください。挿入する代わりに、挿入する前に列を変更してください

ALTER trigger beflogs 
ON dbo.tbl_logs 
INSTEAD OF INSERT 
AS 
    SET NOCOUNT ON 
    BEGIN 

     DECLARE @tc INT 

     SELECT @tc = COUNT(*) 
     FROM dbo.tbl_logs;VALUES(col1,col2,col3,col4,col5) 

     UPDATE dbo.tbl_logs 
     SET id = @tc+1 
     FROM dbo.tbl_logs 
     INNER JOIN inserted i ON i.id = dbo.tbl_logs.id 
    END 

トリガは正常に完了しましたが、データを挿入しようとすると結果はありません。

+4

'を参照してください。それを 'BEFORE/AFTER INSERT'に変更してください。 – cha

+1

@cha正しいのですが、SQLサーバには' before'トリガはありません。挿入の代わりにトリガーを挿入することが可能です。 –

+0

しかし、私はどのように私は自分のデータをそのトリガーに挿入することができます現在、私はいつも私は挿入ステートメントを実行するたびに私の行に何も追加されません – JJBG

答えて

0

ここではサンプルのデモ、INSERT`が挿入されません意味の代わり

CREATE TABLE dbo.data (
    id INT 
    ,NAME VARCHAR(10) 
    ,StoreId INT 
    ) 

CREATE TRIGGER beflogs ON dbo.data 
INSTEAD OF INSERT 
AS 
SET NOCOUNT ON 

BEGIN 
    DECLARE @tc INT 

    SELECT @tc = COUNT(*) 
    FROM dbo.data; 

    INSERT dbo.data (
     ID 
     ,NAME 
     ,StoreId 
     ) 
    SELECT id = @tc + 1 
     ,I.NAME 
     ,I.StoreId 
    FROM inserted I 
END 

INSERT INTO DATA (NAME,StoreId) VALUES ('A',10) 
INSERT INTO DATA (NAME,StoreId) VALUES ('B',20) 

SELECT *FROM DATA 
+1

これは、複数の挿入が発生した場合や、同時挿入が発生した場合に期待される処理を実行しないように見えます。 –

関連する問題