Sql server 从SQL Server中的表中查找可用范围
我有一个表,其中包含起始列和结束列,它们都是Sql server 从SQL Server中的表中查找可用范围,sql-server,sql-server-2016,Sql Server,Sql Server 2016,我有一个表,其中包含起始列和结束列,它们都是INT。我需要找到第一个可用的N范围,并与现有数据进行比较 表架构: CREATE TABLE [dbo].[MSRange] ( [RangeId] [int] IDENTITY(1,1) NOT NULL, [RangeStart] [int] NOT NULL, [RangeEnd] [int] NOT NULL, CONSTRAINT [PK_MSRange] PRIMARY KEY CLUSTE
INT
。我需要找到第一个可用的N
范围,并与现有数据进行比较
表架构:
CREATE TABLE [dbo].[MSRange]
(
[RangeId] [int] IDENTITY(1,1) NOT NULL,
[RangeStart] [int] NOT NULL,
[RangeEnd] [int] NOT NULL,
CONSTRAINT [PK_MSRange]
PRIMARY KEY CLUSTERED ([RangeId] ASC)
) ON [PRIMARY]
样本种子数据:
INSERT INTO [dbo].[MSRange] ([RangeStart], [RangeEnd])
VALUES (1, 150), (1250, 1500), (3100, 7500), (10500, 15000);
要求:
我需要找到1000个插槽的占位符,显然从种子数据我们可以说151到1150是可用的。同样,对于1500个插槽,意味着可以使用1501到3000个插槽
请帮助我如何获得第一个可用的占位符
declare @MSRange table
(
[RangeId] [int] IDENTITY(1,1) NOT NULL primary key,
[RangeStart] [int] NOT NULL,
[RangeEnd] [int] NOT NULL
)
INSERT INTO @MSRange ([RangeStart], [RangeEnd])
VALUES (1, 150), (1250, 1500), (3100, 7500), (10500, 15000);
declare @N int = 1000;
with cte as
(
select RangeId,
RangeEnd as result_range_start,
isnull(lead(RangeStart) over(order by RangeId), 2147483647) as result_range_end
from @MSRange
)
select top 1 result_range_start + 1, result_range_start + @N
from cte
where result_range_end - result_range_start > @N
order by RangeId;
此代码适用于以
2012
开头的版本。对于@@version
@TT。我在一个现有的数据库表中工作,它不是一个新的数据库表。所以,现在我通过利用中间的可用数字来优化数据。他在寻找的是差距。他有实际已满的间隔,他需要找到放置其他1000/1500/N值的位置