2013-11-26 2 views
1

У меня есть 2 таблицыConstraint с утверждением Sql

1. Sales_Items

2. Stock_Items

Я хочу, чтобы убедиться, что, когда любой элемент вставлен в sale_items таблицу, то это qty должно быть меньше (Stock_Items.qty-Sales_Items.Qty), если это условие неверно, тогда вставка должна завершиться неудачей и вызвать исключение.

Как мне это сделать? Нужно ли использовать ограничение sql с помощью выражений или триггеров Sql?

ответ

1

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

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

См. this в качестве ссылки для ограничений.

Надеюсь, я помог!

0

Даже можно применять бизнес-правила с триггерами, вы можете использовать проверочное ограничение с определяемой пользователем функции:

ALTER TABLE sales_items 
ADD CONSTRAINT CHECK (qty < dbo.udfCheckAvailableStock(YourProductIdColumn, qty)) 

Я хотел бы использовать триггер в случае, если вам нужно обновить Stock_Items при добавлении новой строки в Sales_Items.

Триггеры могут применять ограничения, которые являются более сложными, чем те , определенные ограничениями CHECK. В отличие от ограничений CHECK, триггеры могут содержать ссылочные столбцы в других таблицах. Например, триггер может использовать SELECT из другой таблицы для сравнения со вставленными или обновленными данными и выполнять дополнительные действия, такие как изменение данных или отображение пользовательского сообщения об ошибке.

See source