SQL: как вставить данные из одной таблицы и вывести во временную таблицу с дополнительным значением из первой таблицы - PullRequest
0 голосов
/ 03 июля 2018

Я могу использовать ключевое слово OUTPUT оператора вставки для вставки новых данных в таблицу и вывода во временную таблицу.

Входная таблица, которая должна быть вставлена ​​в другую таблицу, имеет идентификатор, который мне нужно передать во временную таблицу, но не таблицу, в которую я собираюсь вставить. Эту временную таблицу позже придется использовать для дополнительной вставки в другую таблицу.

INSERT INTO table1 (Name, Age)
OUTPUT inserted.Id, User.Id (??) INTO TemporaryTable
SELECT Name, Age FROM User

Есть ли способ сделать это? Поскольку для следующей вставки потребуется новый table1.Id с User.Id, поэтому я могу перенести некоторые данные.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Вместо использования временной таблицы вы можете использовать переменную, чтобы она не занимала больше памяти.

create table table1 
(
id int NOT NULL,
,name varchar(50)
,age int,
 PRIMARY KEY (id)
)

insert into table1 (name,age) values ('name', 10)                          

declare @extracolumn as int =  scope_identity() 
select @extracolumn 

используйте этот @extracolumn в следующей операции вставки.

0 голосов
/ 03 июля 2018

Включили ли вы дополнительный столбец в схему временной таблицы?

create table table1 
(
id int
,name varchar(50)
,age int
)

declare @TemporaryTable table -- or Create table #TemporaryTable
(                             
  id int,                     
  userid int -- defining the extra column                 
);                            

declare @extracolumn as int = 100; 
-- or declare @extracolumn as int = (select value from table where condition)
-- note that subqueries cannot be added directly in the output clause
-- so need to declare and set a variable that holds the value

insert into table1
output  inserted.id,@extracolumn into  @TemporaryTable -- or #TemporaryTable
values(1,'name',10)

select * from @TemporaryTable

Выход

id  userid
1   100
...