我希望有关将数字插入行并自动增加其序列的最佳方法提供一些建议。我正在使用SQL Server 2014,我知道有序列对象。我玩过临时桌子,没有什么,但是我只是难以将自己的思想缠住。以下是我正在使用的数据:
Table1: OrderList
Column: LineNumber
Table2: WatchList
Column: LineNumber
订单列表表中的亚麻数自动由另一个系统生成,并导致数字乘以10k。因此,10000,20000,30000。
从订购列表中的数据更新到监视列表表中。然后添加了新的行,但没有亚麻的行。因此,在监视列表表中看起来像:
Item / LineNumber / xzy
134 10000 blah blah
1432 20000 blah blah blah
433 NULL blah blah
839 NULL blah blah
我想做的是运行更新,以将30000和40000填充到那些无效字段,老实说,我不确定最好的方法。
如果您有一些建议或方向最好的道路,我将不胜感激。
您可以通过cte和row_number()。
更新 @YourTable
只是一个指示的表变量。
另外,over (Order by Item)
是任意选择。您可以有over (Order by (Select NULL))
或其他序列。
示例
Declare @YourTable Table (OrderNumber varchar(50),[Item] varchar(50),[LineNumber] int,[xzy] varchar(50))
Insert Into @YourTable Values
(2525,134,10000,'blah blah')
,(2525,1432,20000,'blah blah blah')
,(2525,433,NULL,'blah blah')
,(2525,839,NULL,'blah blah')
,(5050,500,70000,'blah blah')
,(5050,600,80000,'blah blah blah')
,(5050,700,NULL,'blah blah')
;with cte as (
Select *
,RN =10000 * Row_Number() over (Partition By OrderNumber Order by Item) + (Select max(LineNumber) from @YourTable Where OrderNumber=A.OrderNumber)
From @YourTable A
Where LineNumber is null
)
Update cte Set LineNumber = RN
Select * from @YourTable
更新的源
OrderNumber Item LineNumber xzy
2525 134 10000 blah blah
2525 1432 20000 blah blah blah
2525 433 30000 blah blah
2525 839 40000 blah blah
5050 500 70000 blah blah --<< Notice New OrderNumber
5050 600 80000 blah blah blah
5050 700 90000 blah blah