Sql Server 觸發(fā)器可以實(shí)現(xiàn)多表之間同步增加、刪除與更新的功能,可以在滿足特定條件時(shí)自動(dòng)觸發(fā)一些操作,從而保證數(shù)據(jù)的一致性。下面以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明 Sql Server 觸發(fā)器的用法。
假設(shè)有兩張表,一張是商品表(Goods),另一張是庫(kù)存表(Inventory),它們之間存在關(guān)聯(lián),商品表的每一條記錄都對(duì)應(yīng)庫(kù)存表中的一條記錄。當(dāng)在商品表中增加、刪除或更新記錄時(shí),需要自動(dòng)同步到庫(kù)存表中,即增加、刪除或更新對(duì)應(yīng)的庫(kù)存記錄。
首先創(chuàng)建 Goods 表和 Inventory 表:
-- 創(chuàng)建 Goods 表
CREATE TABLE Goods (
ID INT PRIMARY KEY,
Name VARCHAR(50),
Price FLOAT
)
-- 創(chuàng)建 Inventory 表
CREATE TABLE Inventory (
ID INT PRIMARY KEY,
GoodsID INT,
Stock INT,
FOREIGN KEY (GoodsID) REFERENCES Goods(ID)
)
然后創(chuàng)建一個(gè)觸發(fā)器,在 Goods 表上進(jìn)行增加、刪除和更新操作時(shí)自動(dòng)觸發(fā)相應(yīng)的操作:
-- 創(chuàng)建觸發(fā)器
CREATE TRIGGER GoodsTrigger
ON Goods
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
-- 插入操作
IF EXISTS (SELECT * FROM inserted)
BEGIN
-- 在 Inventory 表中插入相應(yīng)的記錄
INSERT INTO Inventory (ID, GoodsID, Stock)
SELECT i.ID, i.ID, 0 FROM inserted i
WHERE NOT EXISTS (SELECT * FROM Inventory WHERE GoodsID = i.ID)
END
-- 更新操作
IF EXISTS (SELECT * FROM inserted) AND EXISTS (SELECT * FROM deleted)
BEGIN
-- 更新 Inventory 表中相應(yīng)的記錄
UPDATE Inventory SET GoodsID = i.ID
FROM Inventory i INNER JOIN inserted ON i.GoodsID = inserted.ID
INNER JOIN deleted ON i.GoodsID = deleted.ID
END
-- 刪除操作
IF EXISTS (SELECT * FROM deleted)
BEGIN
-- 刪除 Inventory 表中相應(yīng)的記錄
DELETE FROM Inventory WHERE GoodsID IN (SELECT ID FROM deleted)
END
END
觸發(fā)器的主體部分包括三個(gè)部分,分別對(duì)應(yīng)插入、更新和刪除操作。在插入操作中,首先檢查是否有插入的記錄,如果有則在 Inventory 表中插入相應(yīng)的記錄。在更新操作中,首先檢查是否有更新的記錄和被更新的記錄,如果有則在 Inventory 表中更新相應(yīng)的記錄。在刪除操作中,首先檢查是否有刪除的記錄,如果有則在 Inventory 表中刪除相應(yīng)的記錄。
使用以上的觸發(fā)器,當(dāng)在 Goods 表中進(jìn)行增加、刪除和更新操作時(shí),庫(kù)存表 Inventory 也會(huì)相應(yīng)地進(jìn)行同步操作,從而保證數(shù)據(jù)的一致性。