Пакетная вставка возвращает идентификатор и ссылку на объект / последовательность - PullRequest
2 голосов
/ 15 октября 2011

С SQL Server 2K8 из C # я пытаюсь сделать пакетную вставку / обновления записей в родительские / дочерние таблицы для оптимизации.

Вставки / обновления автоматически сгенерируют ключ, который я хотел бы извлечь через OUTPUT и т. Д., А затем переназначить в модель домена.Для пакетных вставок мне нужно отслеживать, какой недавно созданный идентификатор принадлежит какому-либо объекту домена в списке пакетов.

Этот пример приближается к тому, что мне нужно, но мне было интересно, есть ли способ не иметь лишнихстолбец добавлен в таблицу (SequenceNumber) и все равно достигать тех же результатов: http://illdata.com/blog/2010/01/13/sql-server-batch-inserts-of-parentchild-data-with-ibatis/

т.е.Можем ли мы полагаться на порядок вставок, сгенерированных из OUTPUT, во временную таблицу, или передать GUID ref, установленный для модели данных и временно переданный в SQL только для справочных целей?

Ответы [ 2 ]

1 голос
/ 15 октября 2011

В SQL Server 2008 можно использовать объединить и вывод , чтобы получить соответствие между сгенерированным ключом и ключом, используемым в промежуточной таблице.

Посмотрите на этот вопрос. Использование merge..output для отображения между source.id и target.id

0 голосов
/ 15 октября 2011

Если я не понял неправильно ...

Суррогатный ключ (IDENTITY или NEWID и т. Д.) Не является вашим действительным идентификатором объекта.Это деталь реализации и не имеет внутреннего значения.

У вас должен быть другой идентификатор (имя, ISBN, серийный номер, код транзакции / дата и т. Д.), Который является реальным (натуральным) ключом.

Ваше предложение OUTPUT может вернуть суррогатный ключ иестественный ключ.Затем вы используете это, чтобы отобразить обратно

...