2012-05-16 3 views
-1

Какой лучший триггер для записи в последний раз, когда строка обновлена ​​или вставлена ​​с использованием столбца даты?Последнее время Среда была обновлена ​​

Я попытался это, но он не работает:

CREATE TRIGGER trUpdate ON Tablename FOR INSERT, UPDATE 
AS 

    IF @@nestlevel = 0 
    BEGIN 

    UPDATE Tablename 
     SET Datecolumn = GETDATE() 
     FROM 
    WHERE ID = (SELECT i.id FROM INSERTED i) 

    END 

ответ

4

Ваш синтаксис просто поодаль:

CREATE TRIGGER dbo.trUpdate 
ON dbo.Tablename 
FOR INSERT, UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE Tablename 
    SET Datecolumn = GETDATE() 
    WHERE ID IN (SELECT id FROM inserted); 
END 
GO 

Теперь то, что вы должны сделать, это изменить столбец NOT NULL и по умолчанию от GETDATE(). Тогда вам нужно только запустить этот триггер при обновлении.

-- first clean up any remaining NULL values: 
UPDATE dbo.Tablename 
    SET DateColumn = '19000101' 
    WHERE DateColumn IS NULL; 

-- now add the default constraint: 
ALTER TABLE dbo.Tablename ADD CONSTRAINT 
    DF_Tablename_DateColumn DEFAULT(GETDATE()) FOR DateColumn; 

-- now add the NOT NULL constraint: 
ALTER TABLE dbo.Tablename ALTER COLUMN DateColumn 
    DATETIME NOT NULL; 

-- now you can update the trigger so that it only fires on update: 
ALTER TRIGGER dbo.trUpdate 
ON dbo.Tablename 
FOR UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE Tablename 
    SET Datecolumn = GETDATE() 
    WHERE ID IN (SELECT id FROM inserted); 
END 
GO 
+0

Извините, больше опечатки, Спасибо миллион, работал как абракадабра!, Ур хорошо! – user851971

+0

Первый триггер сработал для меня, он зарегистрировал метку даты/времени для любой вставки или обновления, сделанной мной, когда я изменил таблицу Xture (dateColumn NOT NULL DEFAULT GETDATE()) до реализации решений ур. – user851971

1

Вы должны изменить

UPDATE Tablename 
     SET Datecolumn = GETDATE() 
    WHERE ID = (SELECT i.id FROM INSERTED i) 

К

IF NOT UPDATE(Datecolumn) 
UPDATE Tablename 
     SET Datecolumn = GETDATE() 
    WHERE ID IN (SELECT i.id FROM INSERTED i) 

так вставленная таблица может conain более одного enty. В противном случае он должен работать нормально.

+0

Синтаксис по-прежнему не соответствует действительности. Вы попробовали? –

+0

Спасибо Мит! для понимания ур. – user851971

+0

@AaronBertrand: извините, пропустил свисание, отредактировал код – Mithrandir

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