【AFTERトリガー】
sales.order itemsテーブルで作成され、このテーブルに対して更新が発生した後に起動するAFTERトリガーの例を次に示します。
CREATE TRIGGER Sales.OrderTotalTrigger
ON Sales.OrderItems
AFTER UPDATE
AS
DECLARE @NewOrderTotal decimal(18, 2);
SELECT @NewOrderTotal = SUM(oi.UnitPrice * oi.Quantity)
FROM Sales.OrderItems oi
JOIN inserted i oON oi.OrderID = i.OrderID
GROUP BY oi.OrderID;
UPDATE Sales.Orders
SET OrderTotal = @NewOrderTotal
FROM inserted
WHERE Sales.Orders.OrderID = inserted.OrderID;
GO
【INSTEAD OFトリガー】
更新可能なビューであり、複数のベーステーブルを対象とするビューのみに使用(ねこ的には、この更新可能なビューの意味がさっぱりわからんちん。ビューって、こうしんできへんやったやんなぁ。)
☝ わかた。。。
『定義したビューに対してデータを変更することもできます。ビューはデータの入っていない仮想的なテーブルなので、実際にはビューの元になる実テーブルのデータが変更されることになります。また、ビューのデータの変更は実テーブルに定義されている制約を受けます。』ということです。
ありがとうございます。『TECKSCORE』様。
CREATE TRIGGER Production.UpdateableView
ON
Production.ItemsView
INSTEAD OF INSERT
AS
DECLARE @SupplierID int
SELECT @SupplierID = SupplierID FROM Purchasing.Suppliers s
JOIN inserted i ON s.SupplierName = i.Supplier;
INSERT INTO Production.Items (ItemName, SupplierID, UnitPrice)
SELECT ItemName, @SupplierID, UnitPrice FROM inserted;
GO
INSERT INTO Production.ItemsView VALUES ('New Item', 'Nod Publishers', 100)
【DDLトリガー(サーバ)】
CREATE TRIGGER dbo.ServerTrigger
ON ALL SERVER
FOR CREATE_DATABASE, ALTER_DATABASE, DROP_DATABASE
AS
SET NOCOUNT ON;
ROLLBACK;
THROW 50001, 'MOdifying databases is not allowed on this server.', 1;
GO
【DDLトリガー(データベース)】
ON DATABASE
FOR CREATE_TABLE, ALTER_TABLE, DROP_TABLE
AS
SET NOCOUNT ON;
ROLLBACK;
THROW 50001, Modifying tables in not allowed in this databases.', 1;
GO
先ほどの「ビュー」の件、質問としてCBTNaggetsのコメントに残してます。だれか答えてくれればいいなぁ。
※コメント投稿者のブログIDはブログ作成者のみに通知されます