2016-09-23 72 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) 
)      

我收到错误:消息2627,无法在对象'dbo.Inventory'中插入重复键。

+1

Your InventoryItemID列是主键? –

+0

没有'id'是主键。我可以理解它不能运行Max(id)+1为每个插入。 – DiH

+1

'InventoryItemID'是'primary'或'unique'键。这就是为什么它不允许你重复值。 –

回答

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

或者我是否可以将ID更改为仅为此插入自动增量,并在完成后禁用自动增量? ALTER TABLE table_name ALTER COLUMN column_name数据类型,类似这样的 – DiH

+0

不知道这是否可能 – GuidoG

+0

我相信不可能将现有列更改为标识 – GuidoG

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

接下来插入你的值到这个临时表变量和使用id在临时表中添加库存表的最大ID计算要插入到表中的值。

+0

您还可以使用Inventory Table的最大ID来初始化身份 – GuidoG