我有以下的情況(SQL Server Express的):通過PK-FK約束 SQL Server觸發器表與外鍵
- 2表
- 的程序使用的數據庫僅有權訪問對視圖的視圖的
- 一個代替觸發器插入件
的想法是,三gger將數據輸入到表格中 - >通過IDENTITY創建一個新的PK,第二個表格現在必須包含1.表格的ID作爲其主鍵的一部分...
如何訪問新創建的1.在多連接環境中的表的PK?這是數據庫的簡化/體改版本:
CREATE TABLE Training (
Training_ID INT IDENTITY NOT NULL PRIMARY KEY,
Name NVARCHAR(30) NOT NULL);
CREATE TABLE Kilometer (
Training_ID INT NOT NULL REFERENCES Training(Training_ID),
Kilometer_ID INT NOT NULL,
Timestamp DATETIME NOT NULL,
PRIMARY KEY(Training_ID, Kilometer_ID);
CREATE VIEW TrainingView (
SELECT t.Name, k.Timestamp
FROM Training t LEFT JOIN Kilometer k ON (t.Training_ID = k.Training_ID));
CREATE TRIGGER TrainingTrigger ON TrainingView INSTEAD OF INSERT AS BEGIN
INSERT INTO Training(Name) SELECT Name FROM inserted;
INSERT INTO Kilometer(Training_ID, Kilometer_ID, Timestamp) SELECT @@Identity, 0, Timestamp FROM inserted;
END;
爲Kilometer_ID默認的「0」是強制性的,由於在數據庫中的其他定義,合併這兩個表是不是一個選項... 雖然觸發似乎功能正確,我不確定它是否會在多用戶環境中發生(@@ Identity,如果另一個連接改變了表格)?
是否有更好的解決方案來觸發此觸發器?
格爾茨邁克爾
感謝您的鏈接,您對設計有任何其他擔憂嗎? – MFH 2010-11-14 17:52:28
我可能只是爲兩個插入存儲了一個過程,但是您的觸發器看起來很健康。我不確定我是否真的得到了表格的內容,但只要不介意你不能在一個語句中插入多行,就像Matt解釋的那樣,結構看起來很好。 – 2010-11-14 18:08:24
好吧,我可能已經過分簡化了示例代碼,在一個語句中插入多行並不是真的需要當前(至少根據當前要求:)) – MFH 2010-11-14 19:55:50