0

主キーとして orderid 列を持つ 500 行のテーブルがあり、値はランダムで、たとえば 10248,10250,10256,10258 などです。これで、最初の 50 行を2 のループですが、orderid 列は 1 ずつインクリメントされます。コードは次のとおりです。

create procedure USP_CopyingDuplicateRows @loop int, @top int
as 
Begin
Declare  @i int = 1,@Maxid int = 0
while(@i <= @loop)
Begin
select @Maxid = max([OrderID]) from [T_MyOrders]
insert into [T_MyOrders]([OrderID],[CustomerID] ,[EmployeeID],[OrderDate],[RequiredDate] ,[ShippedDate] ,[ShipVia],[Freight] ,[ShipName] ,[ShipAddress],[ShipCity] ,[ShipRegion] ,[ShipPostalCode],[ShipCountry] )
select top (@top) @Maxid+(row_number() over( order by [OrderID])) as [OrderID],[CustomerID] ,[EmployeeID],[OrderDate],[RequiredDate] ,[ShippedDate] ,[ShipVia],[Freight] ,[ShipName] ,[ShipAddress],[ShipCity] ,[ShipRegion] ,[ShipPostalCode],[ShipCountry] 
 from T_myorders
set @i=@i+1
END
End

しかし、テーブルが最後の orderid として 10800 で終わる場合、最初の 10 行をコピーすると、最初の 10 の orderid が 10248,10250,10251 であると言って、orderid のギャップを含む orderid を与える必要があります。 10256,10258.... 出力は 10801,10803,10804,10808,10810...... と表示されます。このようにして、orderid 間のギャップ i も追加され、出力に表示されます。誰でもこれを手伝ってもらえますか

4

0 に答える 0