我希望就实现将数字插入行并自动增加序列的最佳方法提供一些建议。我正在使用SQL Server 2014我知道有序列对象。我玩过临时表,什么不是,但我只是在思考这个问题。以下是我正在使用的数据:
Table1: OrderList
Column: LineNumber
Table2: WatchList
Column: LineNumber
OrderList表中的LineNumber由另一个系统自动生成,结果数量为10k。所以,10000,20000,30000。
订单列表中的数据会更新到关注列表表中。然后添加新行,但LineNumber不是。所以在WatchList表中它看起来像:
Item / LineNumber / xzy
134 10000 blah blah
1432 20000 blah blah blah
433 NULL blah blah
839 NULL blah blah
我想要做的是运行更新以将30000和40000填充到那些空字段中,老实说,我不确定最好的方法。
如果您对最适合的路径有一些建议或指示,我会很感激。
答案 0 :(得分:3)
您可以通过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