Как использовать триггер для вставки данных из двух разных таблиц

Я новичок в кодировании, в настоящее время изучаю базы данных в 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. Как я могу автоматически вставлять и обновлять?

Я могу удалить автоматически, используя каскадное удаление

Зачем вообще нужен EmployeeSales? Это данные, рассчитанные из двух других таблиц, вы можете просто использовать JOIN для получения данных

siggemannen 16.04.2023 11:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, вы действительно просто хотите 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 :)

siggemannen 16.04.2023 15:50

если бы в SalesInfo были данные, которые вы можете вставить в EmployeeSales

abolfazl sadeghi 16.04.2023 15:55

Другие вопросы по теме