SQL After триггер значение обновления, которое запускает обновление - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть 2 таблицы, отгрузка и счет.У меня есть триггер после, который обновляет таблицу отгрузки с номером счета-фактуры из таблицы счетов-фактур. Таблица счетов-фактур имеет связанные с ними номера отгрузки, может быть больше одного для каждого счета-фактуры.

Create Trigger ShipmentInvoice
on Therefore.dbo.Invoice
For Insert
AS
Update cat set
  invoice = Fac.invoice
FROM therefore.dbo.thecat10 cat
INNER JOIN therefore.dbo.vFacturaAlbaran alb
  on alb.shipment COLLATE Modern_Spanish_CI_AS = alb.shipment

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

Редактировать

Триггер находится над таблицей счетов.Я обновляю таблицу отгрузки номерами счетов из таблицы счетов.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

кажется странным, что вы обновляете таблицу, которую уже вставляете в;почему вы не решаете правильное значение перед рукой?Это псевдо-sql, но вы попадете на правильный путь

CREATE TRIGGER ShipmentInvoice
ON Therefore.dbo.Invoice
FOR INSERT
AS
    UPDATE cat
    SET invoice = Fac.invoice --There is no table/alias Fac, where is this coming from? inserted?
    FROM therefore.dbo.thecat10 cat
         JOIN inserted i ON cat.{Primary/Foreign ID COLUMN} = i.{Primary/Foreign ID COLUMN}
         INNER JOIN therefore.dbo.vFacturaAlbaran alb ON alb.shipment COLLATE Modern_Spanish_CI_AS = alb.shipment;

Обратите внимание на элементы в скобках ({}), а также мой комментарий о вашем объекте Fac.

0 голосов
/ 24 сентября 2018

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

То есть, поскольку вы объединяете обе таблицы, вам нужно использовать INSERTED таблица, чтобы получить только вставленные строки как:

Create Trigger ShipmentInvoice
on Therefore.dbo.Invoice
For Insert
AS
Update cat set
  invoice = I.invoice
FROM therefore.dbo.thecat10 cat
INNER JOIN INSERTED I alb ON Cat.ID = I.ID
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...