gpt4 book ai didi

sql - 在 SQL 中设置连续的非标识号

转载 作者:行者123 更新时间:2023-12-04 12:47:48 26 4
gpt4 key购买 nike

我希望就实现将数字插入行并自动增加其序列的最佳方法提供一些建议。我正在使用 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

关于sql - 在 SQL 中设置连续的非标识号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46347501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com