2015-03-24 3 views
1

Я пытаюсь создать триггер в SQL Server. Я вставляю данные в базу данных через формы, которые я сделал в Access. Когда я создаю новую запись, которая вставлена ​​в мою таблицу SALESDETAILS, я хочу, чтобы она вычитала quantity (столбец), который был только что введен с моего In Stock (столбец) в моей таблице PRODUCT. SALESDETAILS содержит FK от таблицы PRODUCT (Product_ID).Создание триггера для обновления другой таблицы в SQL Server

Это то, что я придумал, SQL Server создал триггер, но теперь он не позволяет вставлять вставки. После того, как я попытаюсь что-то вставить, он говорит, что PRODUCT.[In Stock] не разрешает NULLS. [In Stock] имеет ограничение, которое не допускает NULLS.

CREATE TRIGGER [Update_Stock] 
ON SALESDETAILS 
FOR INSERT 
AS 
BEGIN 

    UPDATE PRODUCT 
    SET PRODUCT.[In Stock] = (SELECT SALESDETAILS.Quantity - PRODUCT.[In Stock] 
           FROM SALESDETAILS 
           WHERE SALESDETAILS.Product_ID = PRODUCT.Product_ID) 
END 

Я не думаю, что я имею в виду это через правильно, но я не могу показаться, чтобы выяснить, как получить его, чтобы вычесть количество, которое было только что вставленный от [In Stock] на столбец в таблице PRODUCT.

+0

УСТАНОВКА ПРОДУКТА НАСТРОЙКИ [ВХОД] = [ВХОД] - вставлен.Количество, где Product_id = вставлено.product_id не уверен в синтаксисе, но shoudllbe что-то вроде этого – mxix

+0

Вам нужно ** указать ** псевдо-таблицу «Вставлено» в ваш триггер каким-то образом - это «таблица», которая содержит вставленные строки - прямо сейчас, вы обновляете всю таблицу каждый раз, когда вставлена ​​одна строка - не очень эффективно –

ответ

2

Попробуйте для запуска:

CREATE TRIGGER [Update_Stock] ON SALESDETAILS FOR INSERT 
AS BEGIN 
Update p 
set p.stock = p.[stock] - i.quantity 
FROM product AS p 
INNER JOIN inserted AS i 
ON p.id = i.[product_id] 
WHERE p.id = i.product_id 
END 

Inserted это таблица, которая позволяет получить в настоящее время вставляемые значения в SALESDETAILS таблице.

+0

Это отлично работает! Я не знал, что введенная псевдо-таблица доступна при создании триггера. Благодаря! – Jess

Смежные вопросы