Выберите значения нескольких идентификаторов для нескольких вставок вместе со столбцами, не вставленными в таблицу - PullRequest
1 голос
/ 17 февраля 2012

Я вставляю только 1 столбец в таблицу TempId, т.е. имя из оператора select. Как получить соответствующий orderId для столбца идентификаторов.

INSERT INTO tempId 
output inserted.ID 
Select name FROM (
select 'erty' as name, 1 as orderid union 
select 'rth' as name, 2 as orderid union 
select 'yt' as name, 3 as orderid union 
select '345' as name, 4 as orderid union 
select 'rtyu' as name, 5 as orderid union 
select 'uio' as name, 6 as orderid union 
select 'yu' as name, 7 as orderid union 
select 'xzf' as name, 8 as orderid
) as a 

PS Примечание. SELECT с объединением выполняется только для примера запроса.,В идеале я получу вещи из другого стола.

Ответы [ 3 ]

3 голосов
/ 17 февраля 2012

Вы помещаете id и любые другие поля, которые вам понадобятся позже, в таблицу varaiable или temp, используя предложение OUTPUT

DECLARE @MyTableVar table( ID int, orderid int);
INSERT mytable (field1, orderID)
    OUTPUT INSERTED.ID, INSERTED.OrderID
        INTO @MyTableVar
SELECT FIELD2, orderid FROM Myothertable

Теперь у вас есть данные, доступные в @MyTableVar, для вставки в дочерние таблицы или другой работы, которую вы хотели сделать.

0 голосов
/ 17 февраля 2012

Это пример непосредственной вставки значений. Если триггеров нет, вы можете получить @@ IDENTITY.

  insert into [FTSwordDef] ([word]) values ('value') 
  select scope_identity();

Scope_identity (и зло @@) вернет только последний идентификатор. Если вы вставляете несколько строк, то я думаю, что вам нужно было бы зациклить SP и создать список идентификаторов. Идентификатор создан вставкой и недоступен во вставке, насколько мне известно.

Если вы удерживали таблок на вкладке и извлекли последнюю идентификацию и сколько строк было вставлено, то теоретически вставка получила последние значения x inden. Если бы ваша вставка была отсортирована, вы бы знали, к какому идентификатору добавился ряд.

0 голосов
/ 17 февраля 2012

просто расположите столбцы:

create table #tempID( id int, name varchar(50))

INSERT INTO #tempID (name, id)
output inserted.ID 
Select name, orderid FROM (
select 'erty' as name, 1 as orderid union 
select 'rth' as name, 2 as orderid union 
select 'yt' as name, 3 as orderid union 
select '345' as name, 4 as orderid union 
select 'rtyu' as name, 5 as orderid union 
select 'uio' as name, 6 as orderid union 
select 'yu' as name, 7 as orderid union 
select 'xzf' as name, 8 as orderid
) as a 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...