Хранить личность до и после вставки? - PullRequest
1 голос
/ 21 ноября 2010

Есть ли способ сохранить значения идентификаторов непосредственно перед вставкой, а новые значения идентификаторов сразу после вставки в таблицу сопоставления? Таблица сопоставления будет использоваться для обновления внешних ключей в других таблицах.

Первоначально я думал, что это возможно с предложением OUTPUT INTO, но только вставленные значения могут быть вставлены. Я не уверен, как использовать предложение OUTPUT само по себе, чтобы сделать работу. Может быть, какой-то подзапрос?

Возможно, это слишком сложно, и есть способ использовать SCOPE_IDENTITY и подзапросы для этого.

Любая помощь будет высоко ценится.

p.s. Да, я знаю, что могу решить эту проблему путем «резервирования» идентификаторов (вставьте фиктивные строки и затем удалите или DBCC CHECKINDENT), сохраните вновь «зарезервированные» идентификаторы и старые идентификаторы в таблицу сопоставления, обновите таблицу с новыми идентификаторами и, наконец делать вставку с включенным INSERT_IDENTITIES - но это грязно.

Это относится к SQLServer 2008R2.

Вот что не работает:

INSERT 
    [SomeTable]
    OUTPUT
           INSERTED.[Id],
           [Id] -- This doesn't work
        INTO
           [#mappingTable]
SELECT
    (SomeColumns)
FROM
    [#someOtherTable];

Ответы [ 2 ]

0 голосов
/ 03 февраля 2011

Это можно сделать с помощью инструкции MERGE и предложения OUTPUT. Жаль, что никто не ответил с этой информацией, мой коллега показал мне, хотя.

0 голосов
/ 21 ноября 2010

Вы не можете заранее знать, какими будут идентификаторы.

И предложение OUTPUT работает только для таблицы, в которую вы вставили, а не для исходных таблиц.Я тоже этого хотел: было бы полезно.

Итак, вы можете только повторно запросить таблицу INSERTed (как показано ниже) или выполнить UPDATE # mappingTable

INSERT 
    [SomeTable]
SELECT
    (SomeColumns)
FROM
    [#someOtherTable];

SELECT
    ID, stuff
FROM
    SomeTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...