Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从SQL Server中的表中查找可用范围_Sql Server_Sql Server 2016 - Fatal编程技术网

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值的位置