Обновление: просто чтобы исключить одно возможное предложение, я сохранил первый запрос как представление и подставил его в триггер. Никаких изменений в поведении не наблюдалось. Я обновил код ниже, чтобы отразить новое расположение.
Я только начал работать с SQL Триггерами сервера и добился определенного успеха. Текущий бит, над которым я работаю, сбивает меня с толку.
Я работаю с двумя таблицами. Один из них является заголовком заказа, а другой содержит позиции. Триггер отслеживает вставку новой строки в таблицу элементов строки и, если добавленный элемент соответствует определенным критериям, обновляет значение в таблице заголовка заказа. Когда я разбиваю свой запрос и запускаю его отдельно, я получаю то, что ожидаю. Список заказов, которые содержат элементы, за которыми я слежу.
--QUERY WORKS AS EXPECTED
SELECT ord_no, cmt_cd_1
FROM OrderHeader
WHERE ord_no IN
(SELECT DISTINCT OrderHeader.ord_no
FROM OrderLine INNER JOIN OrderHeader
ON OrderLine.ord_no = OrderHeader.ord_no
WHERE (OrderLine.item_no LIKE 'A%') OR
(OrderLine.item_no LIKE 'B%') OR
(OrderLine.item_no LIKE 'C30%'))
Однако, когда я пытаюсь использовать это в триггере, он не работает.
--TRIGGER DOES NOT UPDATE ANY RECORDS
CREATE TRIGGER add_cmt_cd
ON [OrderLine]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE OrderHeader
SET cmt_cd_1 = 'O'
FROM OrderHeader
INNER JOIN inserted ON OrderHeader.ord_no = inserted.ord_no
WHERE (OrderHeader.ord_no IN (SELECT OrderListView.ord_no
FROM OrderListView))
END
I проверили, что запись заголовка создается первой и существует до создания записей позиции. У меня есть другой триггер в этой таблице, который работает нормально, хотя значение, которое он обновляет, находится в той же таблице, что и триггер.
--TRIGGER WORKS AS DESIGNED
CREATE TRIGGER add_line_cmt
ON [OrderLine]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE OrderLine
SET cmt_1 = 'Comment 1',
cmt_2 = 'Comment 2'
FROM OrderLine
INNER JOIN inserted ON inserted.ord_no = OrderLine.ord_no
WHERE (OrderLine.item_no IN (SELECT CAST(item_no AS CHAR) AS item
FROM ItemTable
WHERE (group = 3)))
END
Я бьюсь головой об стол в течение 3 часов, и я знаю, это что-то простое, что я пропустил. Я надеюсь, что некоторые другие наборы глаз заметят это, прежде чем я go орехи.