2016-09-23 5 views
0

私は2つのテーブルを持っています。ここに私のコードは次のとおりです。各列の複数の挿入

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'は'プライマリ 'か'ユニーク 'キーのどちらかです。そのため、重複する値を許可していません。 –

答えて

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の自動インクリメントのみに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) 

次は、この一時テーブル変数に自分の価値観を挿入し、Inventoryテーブルの最大IDを追加し、一時テーブル内のIDを使用テーブルに挿入する値を計算します。

+0

インベントリテーブルの最大IDを使用してIDを初期化することもできます – GuidoG