こんにちは、ねこです。

自称プログラマのおばちゃんのブログです。いろいろあるよねぇ~。

MCSA SQL Server 2016 /70-762/トリガーについて

2019-12-10 12:49:54 | プログラム 勉強

【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トリガー(データベース)】

 CREATE TRIGGER dbo.DatabaseTrigger

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のコメントに残してます。だれか答えてくれればいいなぁ。


最新の画像もっと見る

コメントを投稿