Ошибка триггера Sql Server: SqlException: подзапрос вернул более 1 значения. - PullRequest
0 голосов
/ 27 августа 2018

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

CREATE TRIGGER 
    [dbo].[triggerTest]
ON 
    [dbo].[Original]
AFTER INSERT
AS
  BEGIN
    SET NOCOUNT ON

      If (SELECT city FROM INSERTED) = 'LA' 
          INSERT INTO Hotel 
          SELECT price, quality FROM Inserted AS I
      ELSE IF (SELECT city FROM INSERTED) = 'NY'
          INSERT INTO Inn
          SELECT price, quality FROM Inserted AS I
END

Я обнаружил, что когда я вставляю несколько строк в таблицу Original, я получаю эту ошибку:

Подзапрос SQL Server вернул более 1 значения.Это недопустимо, если подзапрос следует =,! =, <, <=,>,> =

В чем проблема с вышеуказанным триггером?

1 Ответ

0 голосов
/ 27 августа 2018

В таблице INSERTED возвращено больше строк, поэтому вам нужно top (1) с предложением order by, но вместо этого я бы exists:

CREATE TRIGGER [dbo].[triggerTest]
ON  [dbo].[Original]
AFTER INSERT
AS
  BEGIN
    SET NOCOUNT ON

      IF EXISTS (SELECT 1 FROM INSERTED WHERE city = 'LA')
          INSERT INTO Hotel (price, quality)
               SELECT price, quality 
               FROM Inserted AS I
      IF EXISTS (SELECT 1 FROM INSERTED WHERE city = 'NY')
          INSERT INTO Inn (price, quality)
               SELECT price, quality 
               FROM Inserted AS I
  END

Примечание:

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