У меня есть две таблицы вроде этого:
// Person.Details Table:
PersonID int [PK] | EmployeeCreatorID int [FK] | FirstName varchar | OtherInfo...
// Employee.Details Table:
EmployeeID int [PK] | PersonID int [FK] | IsAdmin bit | OtherInfo...
Каждая таблица связана с другой:
[Employee.Details.PersonID]===>[Person.Details.PersonID] AND
[Person.Details.EmployeeCreatorID]===>[Employee.Details.EmployeeID]
через свои внешние ключи.
Проблема в том, что невозможно создать первого человека / сотрудника, не удалив одно из ограничений внешних ключей, вставив строки, а затем добавив ограничение обратно (что довольно слабо).
Очевидный Бог-парадокс здесь заключается в том, что первый «Сотрудник» не существует, чтобы создать себя («Личность»).
Есть ли способ одновременно вставить данные в две таблицы? Этот сценарий «создан создателем» должен произойти только один раз. Если я не могу вставить данные в две таблицы одновременно, есть ли другие способы, которые вы, ТАК, гении, предлагаете?
ПОЯСНЕНИЯ
Существуют и другие таблицы, связанные с таблицей «Персоны», например «Студенты» и «Стражи». Человек не может переключать типы (Сотрудник не может переключаться на Студента или Опекуна, и наоборот). Парадокс похож на таблицу Employee, в которой есть ManagerID FK; за исключением моего случая таблицы были разделены.
РЕШЕНИЕ
спасибо Ремусу Русану и b0fh
--/*seeds database with first employee*/
BEGIN TRAN
GO
INSERT INTO Person.Details
(EmployeeCreatorID, FirstName, Active)
VALUES
(@@Identity, 'Admin', 1)
DECLARE @Identity int;
SET @Identity = @@Identity;
INSERT INTO Employee.Details
(PersonID, IsAdmin, Email, Password)
VALUES
(@Identity, 1, 'admin', 'admin')
UDPATE
Person.Details
SET
EmployeeCreatorID = @@Identity
WHERE
PersonID = @Identity
IF(@@ERROR <> 0)
ROLLBACK TRAN
ELSE
COMMIT TRAN