Intereting Posts
Массовая вставка в базу данных SQL Server из одной таблицы в другую Попытка получить месяц и день прошлого года, а за год до данных XPath fn: данные в SQL-сервере приводят к тому, что преобразование типа в выражении может влиять на «CardinalityEstimate» в выборе плана запроса Обновить родительскую таблицу на основе дочерних записей Какой тип поля SQL Server лучше всего подходит для хранения значений цен? Объедините данные двух столбцов в один столбец, оставляя нулевые значения Неоптимальный план выполнения с использованием sp_executesql Как выглядит современный стандартный стандартный стек Microsoft? Журнал SQL Server 2008 не будет усекать Хранимая процедура c # sql не совершает Ошибка преобразования типа данных varchar в float. c # webservice Строки SQL Server, заполненные пробелом при вставке – почему? Как объединить эти два оператора SQL? Как сворачивать таблицу в SQL Лучший способ получить следующий номер id без "identity"

Как сделать INSERT в таблицы с круговыми отношениями (SQL SERVER)

Я имею дело с набором таблиц в базе данных, которые, как представляется, имеют круговые отношения (см. Изображение). Это база данных ARTS, если какая-либо помощь кому-либо.

Циркулярная ссылка на сервере Sql

Включение пользователя:

  • a) должен создать сеанс (вставить), который, в свою очередь, требует SessionStartTransactionID (= SignOnTransaction)
  • б) SignOnTransaction – это тип ControlTransaction
  • c) ControlTransaciton – это тип транзакции
  • d) Транзакция требует ссылки на существующую сессию (вместе с Оператором и т. д.),

Примечание. Transaction.SessionStartTransactionID, Transaction.OperatorID и Transaction.WorkStationID (thoese 3 являются составным первичным ключом в сеансе) не могут быть NULL в таблице транзакций.

Я не могу понять, как создать (вставить) SignOnTransaction или вставить в любую из таблиц, упомянутых выше.

Как вы это делаете в SQL Server? Возможно ли это? С чего бы начать? Благодаря!

Solutions Collecting From Web of "Как сделать INSERT в таблицы с круговыми отношениями (SQL SERVER)"

Если что-то, что вы описываете, невозможно, вы понимаете это неправильно. Вы не можете иметь таблицу A, у которой есть требуемый ключ, который ссылается на таблицу B, которая имеет необходимый ключ, который ссылается на таблицу A. Один из двух ключей должен иметь значение NULL , или отношения с предыдущим ключом не выполняются.

Некоторые идеи

Учитывая, что Session использует StartTransactionID как часть его первичного ключа, означает, что он не может быть нулевым, поэтому представляется вероятным, что StartTransactionID в транзакции может быть нулевым, чтобы вы вставляли Transaction , затем ControlTransaction, затем SignOnTransaction then Session , а затем обновляете транзакцию, которая был создан с идентификатором. (Если FK не был применен, вы можете пропустить обновление и просто использовать то же значение для PK, если оно не является столбцом Indentity).

Единственное возможное решение, о котором я могу думать, заключается в том, что каждый раз, когда вы впервые вставляете транзакцию , вы должны использовать ALTER TABLE Transaction NOCHECK CONSTRAINT StartTransactionIDconstraint_name , а затем восстанавливать ограничение после обновления таблицы. Похоже, это хакерское решение. Тем более, что вы не можете делать ALTER TABLE в транзакции, чтобы вы оставались открытым для множества проблем.

Поскольку это, как представляется, является частью производственной системы, почему бы вам не запустить SQL Trace, чтобы узнать, как данные заселяются. Это помогает мне все время.