Я новичок в кодировании, в настоящее время изучаю базы данных в SQL Server 2019.
У меня есть 3 стола OrderInfo
, EmployeeSales
и SalesInfo
.
OrderInfo
имеет следующие столбцы:
OrderId, customerId, EmployeeId, ProductId, ShipAddress
В SalesInfo
у меня есть эти столбцы:
OdrId, ProdId, ProdName, ProdQuantity, ProdPrice, ShipAdd
В EmployeeSales
со следующими столбцами
OdrId, EmpId, ProductId, ProductName, ProductQuan, ProductPrice
Я хочу автоматически вставлять данные с помощью триггера.
Empid
и OdrId
должны быть вставлены из OrderInfo
, а остальные детали EmployeeSales
должны быть вставлены из SalesInfo
. Как я могу автоматически вставлять и обновлять?
Я могу удалить автоматически, используя каскадное удаление
Похоже, вы действительно просто хотите VIEW
, это избавляет вас от необходимости поддерживать другую таблицу и синхронизировать ее.
CREATE OR ALTER VIEW dbo.EmployeeSales
WITH SCHEMABINDING
AS
SELECT
o.OrderId,
o.EmpId,
s.ProductId,
s.ProductName,
s.ProductQuan,
s.ProductPrice
FROM dbo.OrderInfo o
JOIN dbo.SalesInfo s
ON s.OrderId = o.OrderId
AND s.ProductId = o.ProductId;
Если у вас есть проблемы с производительностью при запросе этого представления, вы должны убедиться, что ваши таблицы правильно проиндексированы в столбцах соединения. Если это не поможет, вы можете проиндексировать само представление.
Замечу, что дизайн вашей таблицы несколько странный. OrderInfo
и SalesInfo
, кажется, оба представляют отношение Order_Product
, но OrderInfo
содержит информацию, которая также относится ко всему порядку. Поэтому я ожидал, что ProductId
будет удален из OrderInfo
, чтобы у вас была только одна строка для каждого заказа, а не для каждого продукта.
вы можете использовать соединение и триггер для вставки в EmployeeSales
если EmployeeSales имеет отношение к SalesInfo (a.OdrId, ProdId)
CREATE TRIGGER dbo.trigger_OrderInfo
ON OrderInfo
AFTER INSERT
AS
BEGIN
insert into EmployeeSales
(OdrId, EmpId, ProductId, ProductName, ProductQuan, ProductPrice)
select b.OrderId,b.EmployeeId,b.ProductId,a.ProdName,a.ProdQuantity,a.ProdPrice from SalesInfo a
inner join inserted b on a.OdrId=b.OrderId and a.ProdId=b.ProductId
end
Что делать, если данные вставлены в OrderInfo перед SalesInfo :)
если бы в SalesInfo были данные, которые вы можете вставить в EmployeeSales
Зачем вообще нужен EmployeeSales? Это данные, рассчитанные из двух других таблиц, вы можете просто использовать JOIN для получения данных