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

'ВМЕСТО INSERT' означает не вставить. Измените его на 'BEFORE/AFTER INSERT' – cha

+1

@cha, если правильно, триггеры' before' в sql-сервере отсутствуют. можно вставить в таблицу внутри триггера 'вместо вставки'. –

+0

, но как я могу вставить свои данные в этот триггер, в настоящее время всякий раз, когда я запускаю инструкцию insert, ничего не добавляется в мои строки. – 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

Это не похоже, что он будет делать то, что, вероятно, ожидается в случае мультиверсивной вставки или в случае одновременных вставок. –

Смежные вопросы