SQL Server вставляет использование оператора, ВСТАВЛЕННОЕ для получения нового идентификатора и существующего идентификатора

Я вставляю записи от одного дб SQL-сервера в другого. Я должен получить недавно вставленный идентификатор и обновить поле на исходной таблице. Я могу получить новый идентификатор с опцией INSERTED без проблем. Однако я, может казаться, не получаю идентификатор из исходной таблицы. Конечная таблица не имеет поля для идентификатора источника. Исходная таблица является таблицей преобразования, и я не хочу загрязнять конечную таблицу полями преобразования. Это не может быть возможно, но я думал, что сначала согласую с Вами парни.

drop table #Table1
CREATE TABLE #Table1
(
    Table1ID INT,
    Table2ID INT,
    NAME VARCHAR(32)
)

INSERT INTO #Table1
VALUES 
      (1, NULL, 'Fred')
     ,(2, NULL, 'Tom')
     ,(3, NULL, 'Sally')     

--ok, im inserting into #Table2
drop table #Table2
CREATE TABLE #Table2
(
    [Table2ID] [int] IDENTITY(1,1) NOT NULL,
    NAME VARCHAR(32)
)

--THE RUB, I want to insert Table2ID into table3 
--along with Table1ID. I cannot seem to reference table1
--Any Ideas?
insert into #Table2(NAME)
OUTPUT INSERTED.Table2ID, T.Table1ID into #Table3
select Name from #Table1 T
5
задан APC 2 July 2010 в 16:07
поделиться

2 ответа

Вы не можете сделать это с помощью INSERT (так как в нем отсутствует собственное предложение FROM), но вы можете сделать это с помощью MERGE:

MERGE INTO #Table2 as t2
USING #Table1 as t1 ON 0=1
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (NAME) VALUES (t1.NAME)
OUTPUT INSERTED.Table2ID, t1.Table1ID ;
5
ответ дан 14 December 2019 в 13:25
поделиться

Поместите поле идентификатора преобразования в таблицу. Это не загрязняет стол, а правильно решает проблему. Кроме того, вы можете вернуть его в предложении вывода. И это также упростит обновление дочерних таблиц. Я не вижу причин не делать этого, если у вас нет плохих разработчиков, которые используют Select * в производственном коде.

1
ответ дан 14 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: