【发布时间】:2015-01-16 11:20:52
【问题描述】:
这是我的代码:
CREATE TRIGGER trg_Booking
ON Bookings
FOR INSERT, UPDATE
DECLARE @bef AS varchar(25)
SELECT @bef = Role
FROM Inserted, booksys.dbo.Employees
WHERE Inserted.EmployeeNo = Employees.EmployeeNo
IF NOT (@bef = 'Foreman')
BEGIN
RAISERROR ('Only a Foreman can do that!',16,1)
ROLLBACK TRANSACTION
END
我在尝试执行和创建触发器时不断收到错误消息; “消息 156,级别 15,状态 1,过程 trg_booking,第 5 行 关键字 'DECLARE' 附近的语法不正确。”
另外,SQL Server 似乎无法识别“Inserted”对象?
我正在使用 SQL Server 2014 和 Management Studio。
【问题讨论】:
-
此触发器不处理多行插入。在这些情况下,内存驻留表
inserted将包含多行,那么您分配给@bef的值基本上是随机的。此外,您使用的连接语法在 1992 年被显式连接语法取代,虽然它没有错,但它非常过时,there are some compelling reasons not to use it -
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(20 多年前),不鼓励使用它 -
已更改为内部联接。谢谢。我想是时候更新我大脑中的“代码库”,停止使用古董代码了。谢谢你的提示。 :)
标签: sql-server syntax triggers declare