【发布时间】:2010-11-14 23:57:11
【问题描述】:
我有以下情况(SQL Server Express):
- 通过 pk-fk 约束连接 2 个表
- 连接这两个表的视图
- 使用数据库的程序只能访问视图
- 在视图中插入而不是触发器
这个想法是触发器将数据输入到 1. 表中 -> 通过 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 会发生什么,如果另一个连接改变了表?)
这个触发器有更好的解决方案吗?
问候迈克尔
【问题讨论】:
标签: sql-server triggers identity