2016-09-23 5 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

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

기존 열을 ID로 변경하는 것이 불가능합니다. – GuidoG

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

다음 인벤토리 테이블의 최대 ID를 추가이 임시 테이블 변수로 값을 삽입하고 임시 테이블의 ID를 사용 테이블에 삽입 할 값을 계산합니다.

+0

인벤토리 테이블의 최대 ID를 사용하여 ID를 초기화 할 수도 있습니다 – GuidoG

관련 문제