SQL Server: как создать задание, которое будет извлекать поле из строки и помещать его в другую таблицу при каждом добавлении строки - PullRequest
0 голосов
/ 02 июля 2019

У меня есть две таблицы, Orders и RetailPrices.

В таблице order есть столбцы номер заказа на покупку, номер (а) товара и цена продажи.

Вот запрос

SELECT TOP 10 O.Control_Number, OD.Item_Number, OD.Price-- ,* 
FROM Orders O
LEFT JOIN Order_Detail OD ON O.Company_Code = OD.Company_Code 
                       AND O.Division_Code = OD.Division_Code 
                       AND O.Control_Number = OD.Control_Number
WHERE O.Customer_Number = 'ECOM2X'
ORDER BY O.DateRecordModified DESC

И вот что он возвращает:

Control Item_Number     Price
-------------------------------
205746  910M2286NSZ     45.00
205746  910M2210NSZ     45.00
205746  910M2250NSZ     45.00
205747  910B2307NSZ     60.00
205747  910B2155NSZ     65.00
486737  31A450B101L     58.00
486737  31A450B101L     58.00
205745  910B2201NSZ     70.00
205744  910B2448NSZ     65.00
205743  910B2466NSZ     65.00

В розничной таблице указан номер товара и его розничная цена.

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

Затем он проверяет, существует ли этот номер элемента в таблице RetailPrices. Если это так, ничего не делай. Но если этого не произойдет, я бы хотел добавить этот элемент в таблицу и записать его цену продажи в качестве розничной цены.

Кто-нибудь знает, как это сделать?

1 Ответ

0 голосов
/ 02 июля 2019

Звучит так, как будто вам нужен настольный триггер. Если вы гуглите их, вы увидите, что они хорошо документированы. В частности, вы будете смотреть на триггер вставки. Функциональность триггера в основном на ADD/EDIT/DELETE на таблице do SOMETHING.

Теперь предупреждение. Без особого ухода Триггеры могут стать вашим худшим кошмаром. Они скрывают функциональность, они могут вызывать блоки или замедлять работу, они являются последним, чего ожидают или ищут опытные dba / dbd.

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

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

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

...