Могу ли я обновить значение столбца в триггер, когда происходит событие вставки? - PullRequest
3 голосов
/ 29 июня 2011

Я использую SQL Server 2008. Могу ли я обновить значение столбца в той же таблице, в которой происходит триггер вставки?

Т.е., я могу использовать этот код?

CREATE TRIGGER tr_Table1_Insert_Table1name
ON Table1name
FOR INSERT AS

BEGIN

 UPDATE @NEW
    SET COLUMN = 3;

END
GO

Если "Нет", как это может произойти?

Ответы [ 3 ]

2 голосов
/ 29 июня 2011

Если я правильно понимаю ваш вопрос, это должно сделать то, что вы хотите:

CREATE TABLE dbo.Test_Insert_Trigger (
    my_id INT NOT NULL,
    my_string VARCHAR(20) NULL,
    CONSTRAINT PK_Test_Insert_Trigger PRIMARY KEY CLUSTERED (my_id)
)
GO
CREATE TRIGGER dbo.tri_Test_Insert_Trigger
ON Test_Insert_Trigger FOR INSERT
AS
BEGIN
    UPDATE T
    SET my_string = CAST(I.my_id AS VARCHAR(20))
    FROM
        INSERTED I
    INNER JOIN dbo.Test_Insert_Trigger T ON
        T.my_id = I.my_id
END
GO
INSERT INTO dbo.Test_Insert_Trigger (my_id) VALUES (1)
SELECT * FROM dbo.Test_Insert_Trigger

Как указывает OMG Ponies, во многих случаях ограничение DEFAULT - это то, что вам действительно нужно здесь.

1 голос
/ 29 июня 2011

Да, вы можете.С вашим кодом проблем нет, поскольку оператор UPDATE не будет мешать переопределению INSERT.Вы хотели бы что-то вроде этого:

UPDATE Table
SET Column = 3
WHERE Table.ID IN (SELECT ID FROM inserted)
  AND Table.ID NOT IN (SELECT ID FROM deleted);

Это предполагает, что ваша таблица имеет столбец ID.

0 голосов
/ 21 мая 2012

Вы должны использовать триггер вставки для строк обновления.

CREATE TRIGGER tr_Table1_Insert_Table1name ON Table1name 
    AFTER INSERT 
AS  BEGIN   
    UPDATE Table1
    SET COLUMN = 3
    Where ...  
END 
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...