Выходной эквивалент Inserted.id в Postgres - PullRequest
1 голос
/ 04 августа 2020

Я новичок в PostgreSQL и пытаюсь преобразовать скрипты ms sql в Postgres.

Для оператора Merge мы можем использовать вставку при обновлении конфликта или ничего не делать, но использую приведенный ниже оператор , не уверен, что это правильный путь.

MS SQL код:

Declare @tab2(New_Id int not null, Old_Id int not null)

MERGE Tab1 as Target
USING (select * from Tab1
        WHERE ColumnId = @ID) as Source on 0 = 1
        when not matched by Target then
    INSERT 
       (ColumnId
       ,Col1
       ,Col2
       ,Col3
      )
 VALUES (Source.ColumnId
       ,Source.Col1
       ,Source.Col2
       ,Source.Col3
       )
OUTPUT INSERTED.Id, Source.Id into @tab2(New_Id, Old_Id);

Postgres Код:

Create temp table tab2(New_Id int not null, Old_Id int not null)

With source as( select * from Tab1
        WHERE ColumnId = ID)
Insert into Tab1(ColumnId
       ,Col1
       ,Col2
       ,Col3
       )
select Source.ColumnId
        ,Source.Col1
       ,Source.Col2
       ,Source.Col3
       from source

Мой запрос - как convert OUTPUT INSERTED.Id в postgres. Мне нужен этот идентификатор для вставки записей в другую таблицу (скажем, как дочерние таблицы на основе значений, вставленных в Tab1)

1 Ответ

1 голос
/ 04 августа 2020

В операторах PostgreSQL INSERT вы можете выбрать, что должен возвращать запрос. Из документов на INSERT :

Необязательное предложение RETURNING заставляет INSERT вычислять и возвращать значения на основе каждой фактически вставленной (или обновленной) строки, если ON CONFLICT DO Предложение UPDATE использовалось). Это в первую очередь полезно для получения значений, которые были предоставлены по умолчанию, например порядкового номера. Однако допускается любое выражение, использующее столбцы таблицы. Синтаксис списка RETURNING идентичен синтаксису списка вывода SELECT. Будут возвращены только те строки, которые были успешно вставлены или обновлены.

Пример (сокращенная форма вашего запроса):

WITH [...] INSERT INTO Tab1 ([...]) SELECT [...] FROM [...] RETURNING Tab1.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...