Quantity
列のInventoryOnHand
テーブルがあります。ロジックに基づいて適切なテーブルのSQL Serverでトリガーを作成する
InventoryTransaction
レコードがINSERTEDの場合、InventoryOnHand
テーブルのQuantity
を更新する必要があります。
誰かが次のように説明していただけます。
トリガーは
InventoryOnHand
テーブルまたはInventoryTransaction
テーブルに作成する必要がありますか?InventoryTransaction
テーブルは 'INSERTED'なので、トリガーに名前を付けるときは、tablenameに更新されたテーブルまたはトリガーが適用された実際のテーブルを使用する必要がありますか?例:ここでは
tr_InventoryTransactionIns
は私が持っているものです:
CREATE TRIGGER dbo.tr_InventoryTransactionIns
ON dbo.Inventory
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
UPDATE Inventory SET QuantityOnHand = QuantityOnHand + INSERTED.Quantity
END
GO
**(1)**:はい、トリガーアクションが* *トリガが発生する原因となるテーブルの上になければなりません。データが 'InventoryTransaction'テーブルに挿入されたときにトリガを起動したいので、トリガ**はこのテーブルで**でなければなりません。 **(2)**:それはあなたとあなたの命名規則に完全に従う - 「受け入れられた」ベストプラクティスまたは一般的に受け入れられているコンベンションはここにない - あなたのチーム/会社のために何かを定義してそれに固執する –
@marc_s last last質問。どのような場合、複数のレコードがINSERTEDテーブルと単一レコードかになりますか?私は、コードがSELECT INSERTを行う場合、複数のものがあると仮定しようとしています。しかし、それは単にそれぞれのループのために行い、それぞれが個々の権利であるたびにデータベース呼び出しを行うのであれば? –
'Inserted'テーブルに複数の行がある可能性を考慮し、対処する必要があります。私の応答を参照してください。これは、単一のUPDATE文でこれを処理するための適切な**集合ベース**アプローチを使用します。 ***あなたは***決してループやカーソルをトリガーの中に入れてはいけません。それはあなたのシステムでのパフォーマンスの死であろう! –