У меня следующая ситуация (SQL Server Express):
- 2 таблицы, связанные через ограничение pk-fk
- представление, объединяющее эти две таблицы
- программа для использования базы данных имеет доступ только к представлению
- вместо триггера для вставок в представлении
Идея состоит в том, что триггер вводит данные в таблицу 1. -> новый PK создается через IDENTITY, вторая таблица теперь должна содержать идентификатор таблицы 1. как часть ее первичного ключа ...
Как получить доступ к вновь созданному ПК таблицы 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;
Значение по умолчанию «0» для Kilometer_ID является обязательным из-за других определений в базе данных, объединение этих двух таблиц не вариант ...
Хотя триггер работает нормально, я не уверен, что он будет работать в многопользовательской среде (что происходит с @@ Identity, если другое соединение изменяет таблицу?)
Есть ли лучшее решение для этого триггера?
Приветствую, Майкл