【发布时间】:2017-05-01 05:00:15
【问题描述】:
如果预订被取消,我有以下代码可以从表格中删除信息,但我收到以下错误:
消息 207,级别 16,状态 1,过程 trgDelBooking,第 10 行
列名“BookingStatus”无效。
但是列名绝对正确。
这是我的代码:
ALTER TRIGGER trgDelBooking
ON HVCBookings
AFTER UPDATE
AS
BEGIN
SELECT *
FROM Inserted
DELETE FROM HVCActivityBooking
WHERE PartyID = (SELECT PartyID FROM inserted)
AND BookingStatus = 'CANCELLED'
END
GO
有什么建议吗?
【问题讨论】:
-
我认为数据库:
HVCActivityBooking.BookingStatus不存在。 -
请同时提供表结构。
-
您的触发器有 MAJOR 缺陷,因为您似乎认为它会每行调用一次 - 那是不是 b> 情况。触发器将每条语句触发一次,因此如果您的语句更新 25 行,您将触发触发器一次,但随后
Inserted伪表将包含 25 行.您的代码将在这 25 行中选择哪一行?(SELECT PartyID FROM inserted)- 它是不确定的,您将获得任意行,您将忽略所有其他行。您需要重写触发器以考虑到这一点! -
@marc_s:我同意你的评估,但是如果
Inserted有不止一行,它不会给出Subquery returned more than 1 value错误吗?我不希望它在触发器中的工作方式有所不同(与触发器之外的查询相反)。 -
@BenThul:是的,可能 - 你是对的。整个触发器本身就有缺陷。
标签: sql sql-server triggers