我有以下的情况(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