Оператор SQL нужна помощь в понимании этого - PullRequest
1 голос
/ 01 июня 2011

Мне трудно понять, что делает этот код. Может кто-нибудь помочь мне понять этот код построчно, чтобы я мог понять, что он делает.

CREATE TRIGGER LowCredit ON Order
AFTER INSERT
AS

DECLARE @creditrating tinyint

SELECT @creditrating = v.CreditRating
FROM Customer c INNER JOIN inserted i
ON c.custID = i.custID

IF @creditrating = 5
BEGIN

    RAISERROR ('This customers''s credit rating
    is too low to accept new orders.’)

    ROLLBACK TRANSACTION

END

Ответы [ 5 ]

2 голосов
/ 01 июня 2011

Он проверяет, является ли кредитный рейтинг определенным значением, если его слишком низкий уровень вызывает ошибку и откатывает транзакцию.

--Declare a trigger with name `LowCredit` on table `Order`, 
--run the trigger after 
CREATE TRIGGER LowCredit ON Order  
insert.
AFTER INSERT

AS
--start definition
--declare int
DECLARE @creditrating tinyint

--select from existing customer record the
-- inserted rows credit ranking (by custID)
-- inserted is the vt containing the changed rows
SELECT @creditrating = v.CreditRating
   FROM Customer c INNER JOIN inserted i
ON c.custID = i.custID
--if lower than 5 roll back
IF @creditrating = 5
BEGIN
--raise error to the session
RAISERROR ('This customers''s credit rating
is too low to accept new orders.’)
--roll back transaction
ROLLBACK TRANSACTION

END
1 голос
/ 01 июня 2011

Ошибка в строке 7. Замените v. на i. или c..

1 голос
/ 01 июня 2011

ROLLBACK в триггере предотвратит вставку строки в Order, если кредитный рейтинг клиента слишком низкий ...

inserted - это виртуальная таблица, содержащая вставленные строки.

0 голосов
/ 01 июня 2011

Проверка "CreditRating" Клиента, чей заказ создается, если Рейтинг меньше 5 и будет сгенерирована ошибка, а транзакция будет ОткатЯ надеюсь, что кодер использовал Begin Transaction где-то еще, и другая мудрая транзакция RollBack без Begin выдаст ошибку

0 голосов
/ 01 июня 2011

INSERTED - это специальная таблица, содержащая копию новых (или измененных для ОБНОВЛЕНИЯ) строк в таблице Order

. Она используется для просмотра таблицы Customer, чтобы найти кредитрейтинг.

Если кредитный рейтинг слишком низкий, выдается ошибка

Некоторые проблемы:

  • он не будет обрабатывать несколько строк (например, многие ЗАКАЗЫ водин ход).Фактический проверяемый кредитный рейтинг будет случайной строкой, однако многие из них вставляются
  • без блока TRY / CATCH, чтобы обеспечить лучшую обработку ошибок и предотвратить прерывание пакета, вызываемое прерыванием пакета
  • отсутствует SET NOCOUNT ON в определенный момент прервет работу большинства клиентов

Примечания:

  • триггер является частью области действия оператора INSERT и связанной транзакции
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...