У меня есть 3 таблицы:
- CARD (число, Credit_Line, Balance)
- USED (cardn, transn)
- TRANSACTION (число, сумма)
Я хочу создать триггер, который проверяет, что
TRANSACTION.Amount+CARD.Balance is not greater than CARD.Credit_Line
каждый раз, когда я вставляю новую транзакцию.
Я уже пытался выполнить следующее, итриггер является приемлемым для SQL Server, но кажется, что он не работает, когда я вставляю новую транзакцию.
Вот мой код:
CREATE TRIGGER check_b
ON TRANSACTION
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @balance MONEY,
@credit_line MONEY,
@amount MONEY
SELECT @balance = Balance, @credit_line = Credit_Line, @amount = amount
FROM TRANSACTION, USED, CARD
WHERE TRANSACTION.number = USED.transn
AND USED.cardn = CARD.number
IF (@balance + @amount > @credit_line)
BEGIN
ROLLBACK TRANSACTION
END
END
Я ожидаю ошибку от SQL Server, когдаЯ вставляю новый Transaction
, но по какой-то причине триггер не выполняет эту работу.
ОБНОВЛЕНИЕ!
Вот мой новый код:
CREATE TRIGGER check_b
ON TRANSACTION
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @amount MONEY
SELECT @amount = amount
FROM TRANSACTION, USED, CARD
WHERE TRANSACTION.number = USED.transn
AND USED.cardn = CARD.number
IF (SELECT Balance FROM Card) + @amount > (SELECT Credit_Line FROM CARD)
BEGIN
ROLLBACK TRANSACTION
END
END
Я получаю ошибку:
Сообщение 512, Уровень 16, Состояние 1, Процедура check_b, Строка 11
Подзапрос возвратил более 1 значения.Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.