簡體   English   中英

在SQL中設置順序非標識號

[英]Set Sequential Non-Identity Numbers in SQL

我希望有一些關於實現將數字插入行並自動增加其序列的最佳方法的建議。 我正在使用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填充到那些空字段中,老實說,我不確定最好的方法。

如果你有一些建議或指導哪條路最好,我會很感激。

您可以通過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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM