我正在尝试在SQL Server 2008上创建触发器。我希望如果我在tabele日志中更新另一个表Doc中的新值更新字段。这是触发器的代码:
Create TRIGGER dbo.DocSt
ON dbo.log
AFTER UPDATE
IF (SELECT COUNT(*) FROM inserted) > 0
BEGIN
IF (SELECT COUNT(*) FROM deleted) > 0
BEGIN
UPDATE [dbo].[Doc]
SET
[ID_user] = (select ID_user from inserted)
WHERE
IDN= (select id_doc from inserted)
END
END
当我更新表日志triger更新表Doc中的字段但是它插入NULL。 我做错了什么?谢谢!
答案 0 :(得分:1)
这段代码不会起作用 - 你的UPDATE语句中会发生什么更新10行?这个选择给你什么:
SET [ID_user] = (select ID_user from inserted)
您正尝试将单个值设置为SELECT
语句中的整个返回集 - 这显然不起作用。
您需要创建一个与Inserted
伪表连接的UPDATE语句:
CREATE TRIGGER dbo.DocSt
ON dbo.log AFTER UPDATE
UPDATE [dbo].[Doc]
FROM Inserted i
SET [ID_user] = i.ID_User
WHERE IDN = i.id_doc
这样,对于Inserted
中的每个条目,您都会将表dbo.Doc
加入其中并更新ID_user
列。