2016-08-01 90 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

'INSTEAD OF INSERT'意味着不插入。将其更改为'BEFORE/AFTER INSERT' – cha

+1

@cha正确,在sql server中没有'before'触发器。可以在'而不是insert'触发器中插入表格。 –

+0

但我怎么能插入我的数据在该触发器,目前每当我运行插入语句什么都没有添加到我的行 – JJBG

回答

0

请参考这里的样品演示,

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

这看起来并不像它在多行插入事件中或在并发插入事件中可能会做的那样。 –