Я думаю, что вы можете сделать это в транзакции, используя «грязное чтение» ( чтение незафиксировано ).
Но это не очень приятно, даже если это возможно.
Как подсказал @tvanfosson, самым чистым способом было бы отключить FK на столбце ActorId таблицы CatchPhrases.
Сначала создайте фиктивную строку CatchPhrases (для вставки идентификатора), например:
0 - 0 - «Нет любимой фразы», 0
Тогда, когда вы хотите вставить строку актеров, по умолчанию используется:
(личность) - 0 - «Арнольд Шварценеггер»
Затем установите переменную в значение @@ identity, которое сгенерирует вставка Actors
Тогда броская фраза:
(личность) - (переменная) - 'Hasta la vista baby'
Затем установите для переменной значение @@, которое сгенерирует вставка CatchPhrases, и используйте ее для обновления идентификатора ключевой фразы в строке актеров.
... фу, ты уверен, что этот дизайн подходит?
EDIT
Хорошо, если мы сможем изменить дизайн ...
Глядя на отношения, у Актеров может быть много Catchphrases, а у Catchphrases может быть много Актеров. Таким образом, существует конструкция «многие ко многим», которая обычно подвергается рефакторингу с использованием объекта ссылки (MSDN называет это таблицей соединений ):
Actors
|
-----
| | |
ActorsCatchphrases
| | |
-----
|
Catchphrases
- У актеров есть имя и детали актера (без ссылок на броские фразы)
- ActorsCatchphrases имеет ActorId, CatchphraseId и логическое значение того, является ли он фаворитом этого актера
- Catchphrases содержит подробности броской фразы (без ссылки на актера)