【发布时间】:2025-12-07 08:30:01
【问题描述】:
我有一个关于 SQL 的小问题困扰了我一段时间,假设我有两个表(Customer 和 Loan)。但是,我想要一个基于Borrowertype 属性进行检查的触发器。我想在 AND 之后的第二个查询中,我需要检查Loans 中的userID 是否与Customer 中的相同,但一定是搞砸了,否则我完全认为这是错误的方式。
CREATE TABLE Customer
(
userID int identity primary key,
Name varchar(20),
Borrowertype varchar(20)
);
CREATE TABLE Loan
(
Id int identity primary key,
userID int,
FOREIGN KEY (userID) REFERENCES Customer(userID)
);
IF OBJECT_ID ('Customer.maximum_books_per_user','TR') IS NOT NULL
DROP TRIGGER Customer.maximum_books_per_user;
GO
CREATE TRIGGER maximum_books_per_user ON Customer
AFTER INSERT
AS
IF (SELECT Borrowertype FROM Customer) = 'diffborrowertypehere'
AND (SELECT COUNT(*) FROM inserted AS i JOIN Customer AS c
ON ??? WHERE ???
) > 5
BEGIN
ROLLBACK TRANSACTION
RAISERROR('You have reached maximum allowed loans.', 16, 1)
END
GO
【问题讨论】:
-
Inserted 仅包含使用这一事务插入的行。你应该只检查那个还是对照早期的贷款?也许检查约束+一个函数会更容易弄清楚。
-
您的
SELECT BorrowerType FROM Customer将返回来自客户的所有行,因此您不能再使用简单的=,因为这没有任何意义。您能否解释一下您对触发器的要求,因为到目前为止您发布的内容尚不清楚? -
@TobbyLL 嗯...我想检查一个人可以在 Loans 中拥有的最大行数。因此,如果一个人有超过 5 个,那么它将不会被插入到贷款中。
-
您在哪里注明借出的物品?
标签: sql sql-server triggers sql-server-2012