我需要能够监视一个表并在插入记录时做出反应。此表没有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非常重要 - 即使是批量插入,我只需要插入最后一条记录 - 我知道这是一个奇怪的请求。
答案 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()。