【发布时间】:2016-01-26 15:16:53
【问题描述】:
每当更新 table_A 中的值时,我有一个触发器插入/更新 table_B 中的值。在某些情况下(使用实体框架),此触发器会导致错误“事务与连接不匹配”。
有人有建议吗?
触发器的代码是这样的:
CREATE TRIGGER dbo.SetLastUpdateOnTableB
ON dbo.TableA
AFTER UPDATE
AS
BEGIN
IF (NOT EXISTS(SELECT * FROM TableB WHERE personId = (SELECT TableA.Id From TableA INNER JOIN inserted ON TableA.Id = inserted.Id)))
BEGIN
INSERT INTO TableB(PersonId, LastUpdate)
VALUES((SELECT TableA.Id From TableA INNER JOIN inserted ON TableA.Id = inserted.Id), CURRENT_TIMESTAMP)
END
ELSE
BEGIN
UPDATE TableB
SET LastUpdate = CURRENT_TIMESTAMP
WHERE personId = (SELECT TableA.Id From TableA INNER JOIN inserted ON TableA.Id = inserted.Id)
END
END
GO
【问题讨论】:
-
你的触发器坏了。
inserted可以包含 0、1 或 多个 行。你需要重写你的语句来处理这个问题(事实上,在一次特定的运行期间,这些行中的 一些 可能代表新条目,而其中 一些 可能是现有条目,就TableB而言。
标签: sql sql-server entity-framework triggers transactions