我有一个小问题,现在一直困扰着我的SQL,比方说我有两个表(Customer
和Loan
)。不过,我想要一个基于Borrowertype
属性进行检查的触发器。我想在第二个查询之后,我需要检查Loans
中的userID
是否与Customer
中的userID
相同,但是必须将其搞乱,否则我完全错误地认为这是错误的。SQL Server 2012触发器
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
插入的只包含插入与此一个交易行处理多个客户插入。你应该只检查一下还是对早期的贷款呢?也许检查约束+一个函数会更容易弄清楚。 – 2015-02-23 19:48:22
您的'SELECT BorrowerType FROM Customer'将返回来自Customer的所有行,因此您无法使用简单的'=',因为这没有意义。你能否解释你对触发器的要求,因为从目前为止发布的内容不清楚吗? – TobyLL 2015-02-23 19:48:54
@TobbyLL嗯...我想检查贷款中可以有的最大行数。所以如果一个人超过5个,那么它就不会被插入到贷款中。 – zxcvsadfqwerty 2015-02-23 19:52:29