我遇到以下情况(SQL Server Express):
-
通过pk-fk约束连接的两个表
-
连接这两个表的视图
-
使用数据库的程序只能访问视图
-
视图上插入的instead of触发器
其思想是触发器将数据输入1。表->通过标识创建新主键,第二个表现在必须包含1。表的ID作为主键的一部分。。。
如何访问1的新创建的主键。多连接环境中的表?这是数据库的简化/修改版本:
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;
由于数据库中的其他定义,公里ID的默认值“0”是必需的,合并这两个表不是选项。。。
虽然触发器似乎运行正常,但我不确定它是否会在多用户环境中运行(如果另一个连接更改了表,则@@Identity会发生什么情况?)
有没有更好的解决办法?
格里茨·迈克尔