从SQL 2005数据库中获取最后一个UNIQUEIDENTIFIER插入到TRIGGER内的表中

时间:2011-11-07 18:52:34

标签: sql-server-2005 tsql triggers

我需要能够监视一个表并在插入记录时做出反应。此表没有ITN IDENTITY字段,只有UNIQUEIDENTIFIER作为其主键。在不对现有输入,SP等进行任何更改的情况下,我需要能够从触发器中找到最后插入的ID。这就是我所拥有的(显然不起作用):

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

    EXEC UserInserted (SELECT User_Id FROM INSERTED);

END
GO

这里我试图从Users表中最后插入的记录中获取User_Id,并通过UserInserted SP运行它。谢谢你的帮助,我很难过。

HLGEM非常重要 - 即使是批量插入,我只需要插入最后一条记录 - 我知道这是一个奇怪的请求。

1 个答案:

答案 0 :(得分:2)

您需要更改触发器才能触发INSTEAD OF INSERT。必须使用 NEWID()函数生成 uniqueidentifier 变量。在触发器主体的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()