Получить последний UNIQUEIDENTIFIER, вставленный в таблицу внутри TRIGGER из базы данных SQL 2005 - PullRequest
2 голосов
/ 07 ноября 2011

Мне нужно иметь возможность следить за таблицей и реагировать очень быстро, когда вставлена ​​запись. Эта таблица не имеет поля ITN IDENTITY, только UNIQUEIDENTIFIER в качестве ее первичного ключа. Без каких-либо изменений существующих входов, SP и т. Д. Я должен быть в состоянии найти последний вставленный идентификатор из триггера. Вот что у меня (очевидно, не работает):

CREATE TRIGGER TR_UserInserted
   ON  Users
   AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    EXEC UserInserted (SELECT User_Id FROM INSERTED);

END
GO

Здесь я пытаюсь получить User_Id из последней вставленной записи в таблице Users и запустить ее через UserInserted SP. Спасибо за помощь, я в тупике.

HLGEM Замечательно - даже при массовой вставке мне нужна только последняя вставленная запись - я знаю, что это странный запрос.

1 Ответ

2 голосов
/ 07 ноября 2011

Вам нужно изменить свой триггер, чтобы он срабатывал ВМЕСТО ВСТАВКИ.Переменная uniqueidentifier должна быть сгенерирована с использованием функции NEWID () .В операторе INSERT в теле триггера столбцы должны быть представлены по порядку.Предполагая, что таблица определена следующим образом:

CREATE TABLE Users (
    First int,
    User_Id uniqueidentifier PRIMARY KEY,
    Third int,
    Fourth int)

Тогда триггер будет:

CREATE TRIGGER TR_UserInserted ON Users
INSTEAD OF INSERT AS
BEGIN

DECLARE @newid uniqueidentifier = NEWID()

INSERT INTO Users
SELECT
    First,
    @newid,
    Third,
    Fourth
FROM inserted

EXECUTE UserInserted(@newid)
-- you can actually provide all the columns to UserInserted

END

Чтобы это работало правильно, убедитесь, что в таблице нет первичного ключа по умолчаниюкак NEWID () .

...