2016-09-23 3 views
0

У меня есть две таблицы. Я хочу, чтобы мой код делал вставку из каждого столбца, который у меня есть в первой таблице. Вот мой код:Множественная вставка для каждого столбца

insert into Inventory (InventoryItemID,ID) 
select 
     inventoryitemid, 
     (select MAX(id)+1 from Inventory) 
from Inventory_Panel 
where InventoryItemID 
IN 
(
    select InventoryItemID 
    from InventoryBarCodes 
    WHERE BarCode IN (SELECT BarCode FROM Market) 
)      

Я получаю сообщение об ошибке: Msg 2627, не удается вставить повторяющийся ключ в объект «dbo.Inventory».

+1

Ваш столбец InventoryItemID является первичным ключом? –

+0

Нет 'id' является основным ключом. Как я могу понять, он не может запустить Max (id) +1 для каждой вставки. – DiH

+1

'InventoryItemID' является либо« основным », либо« уникальным »ключом. Именно поэтому он не позволяет дублировать значения. –

ответ

0

да, вы можете сделать это в цикле, как это:

declare @InventoryItemID int 
declare @ID int 

declare crInventoryPanel Cursor local fast_forward for 
    select inventoryitemid 
    from Inventory_Panel 
    where InventoryItemID IN (select InventoryItemID 
          from InventoryBarCodes 
          WHERE BarCode IN (SELECT BarCode FROM Market) 
          )       
open crInventoryPanel 
fetch next from crInventoryPanel into @InventoryItemID 
while @@FETCH_STATUS = 0 
begin 
    select @ID = max(ID) + 1 from Inventory 

    insert into Inventory (InventoryItemID, ID) 
    values (@InventoryItemID, @ID) 

    fetch next from crInventoryPanel into @InventoryItemID 
end 
close crInventoryPanel 
deallocate crInventoryPanel 
+0

ИЛИ Могу ли я изменить идентификатор на автоматический инкремент только для этой вставки и отключить автоинкремент, когда он будет завершен? ALTER TABLE имя_таблицы ALTER COLUMN column_name тип данных, что-то вроде этого – DiH

+0

не уверен, что это возможно – GuidoG

+0

Я полагаю, что невозможно изменить существующий столбец на личность – GuidoG

0
DECLARE @tTemp TABLE(
Id int IDENTITY(1, 1) 
, InventoryItemId int) 

Далее введите ваши значения в эти временные переменные таблицах и использовать идентификатор во временной таблице добавить максимальный идентификатор таблицы Inventory для вычисления значения для вставки в таблицу.

+0

, вы также можете использовать максимальный идентификатор таблицы инвентаризации для инициализации идентификатора – GuidoG

Смежные вопросы