【发布时间】:2021-07-14 02:55:06
【问题描述】:
有两个触发器;第一个触发器运行良好,但我想在同一个表中添加另一个触发器。
第二个触发器是after update 触发器。请检查并告诉我这是对还是错,或者如果我们运行此触发器,它将运行完美与否
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tr_issueBook]
ON [dbo].[IssueBooks]
FOR INSERT
AS
BEGIN
DECLARE @IsbnNumber varchar(255)
SELECT @IsbnNumber = ISBN_Number FROM inserted
UPDATE searchBooks
SET tbl_numberOfCopies = tbl_numberOfCopies - 1
WHERE tbl_IsbnBooks = @IsbnNumber
END
/******2nd Trigger ******/
CREATE TRIGGER [dbo].[tr_issueBook2]
ON [dbo].[IssueBooks]
AFTER UPDATE
AS
BEGIN
DECLARE @IsbnNumber varchar(255)
SELECT @IsbnNumber = BookTitle FROM updated
UPDATE searchBooks
SET tbl_numberOfCopies = [tbl_numberOfCopies] + 1
WHERE tbl_bookTitle = @IsbnNumber
END
我的第二个触发器抛出了一个错误:
更新了无效的对象名称
【问题讨论】:
-
我们不能告诉你它是否完美——你的工作就是测试它,看看它是否满足你的需求。虽然我可以告诉你,这些触发器都不起作用。插入的是一个表,因此可以包含多行(或 0 行)。您需要以基于集合的方式(而不是程序方式)来处理它。而且您不一定需要 2 个触发器 - 您可以将逻辑组合成一个触发器 - 这可能会或可能不会执行得更好。
-
@DaleK 当我在表中插入一些东西时,第一个触发器将完美运行,但是当我在同一个表中更新时,我想增加 +1。有可能
-
如果你插入 2 行,只有 1 个(基本上是随机的)
IsbnNumber会被更新。试试看。 -
没有
updated伪表可用于 AFTER UPDATE 触发器 - 只有Inserted(更新后具有 新值),并且Deleted(更新前的旧值)
标签: sql sql-server tsql triggers