Sql Server中的最大记录数

Sql Server中的最大记录数,sql,sql-server,Sql,Sql Server,我应该在SQLServer中创建一个查询,其中我只请求最大数量的记录,例如2000条。 我使用的查询是 SELECT * FROM [AlarmsHistory] WHERE (DATEPART (year, StartTime) = {0}) AND (DATEPART (month, StartTime) = {1}) AND (DATEPART (day, StartTime) = {2} ) 其中,{0}我写年份,{1}我写月份,{2}我写日期。 我可能有从0到5000条记录。

我应该在SQLServer中创建一个查询,其中我只请求最大数量的记录,例如2000条。 我使用的查询是

SELECT * 
FROM [AlarmsHistory] 
WHERE (DATEPART (year, StartTime) = {0}) 
AND (DATEPART (month, StartTime) = {1}) 
AND (DATEPART (day, StartTime) = {2} )
其中,
{0}
我写年份,
{1}
我写月份,
{2}
我写日期。 我可能有从0到5000条记录。 我想要的是在一个表中最多显示2000条记录。

如果是永久值 如果TOP2000是一个永久值,则可以使用它。不要忘记ORDER BY,它可以指定要显示的记录的优先级

SELECT TOP 2000 * 
FROM [AlarmsHistory] 
WHERE (DATEPART (year, StartTime) = {0}) 
    AND (DATEPART (month, StartTime) = {1}) 
    AND (DATEPART (day, StartTime) = {2} )
ORDER BY StartTime DESC -- don't forget about an order, it matters for TOP
如果值不同(从SQL Server 2012开始) 页码等于1的分页查询like:

DECLARE @PageSize INT = 2000;
DECLARE @PageNumber INT = 1;

SELECT * 
FROM [AlarmsHistory] 
WHERE (DATEPART (year, StartTime) = {0}) 
    AND (DATEPART (month, StartTime) = {1}) 
    AND (DATEPART (day, StartTime) = {2} )
ORDER BY StartTime DESC
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY;
在此处阅读有关偏移/提取的更多信息:

如果值不同(服务器版本低于SQL server 2012) 没有
偏移量
/
获取下一行
,因此使用CTE和
行号()覆盖(ORDER BY…
为结果集中的每一行提供
行号
,然后查询必要的范围。这种方法也用于SLQ服务器的旧版本中的分页,因此我使用
@PageSize
@PageNumber
变量来显示通用解决方案。你绝对可以缩短它

DECLARE @PageSize INT = 2000;
DECLARE @PageNumber INT = 1;

WITH NumberedRows AS
(
    SELECT
        ROW_NUMBER() OVER(ORDER BY StartTime DESC) AS RowNumber,
        * 
    WHERE DATEPART(year, StartTime) = {0}
        AND DATEPART(month, StartTime) = {1} 
        AND DATEPART(day, StartTime) = {2}
    FROM [AlarmsHistory]
)
SELECT *
FROM NumberedRows
WHERE RowNumber
    BETWEEN @PageSize * (@PageNumber - 1) + 1
    AND @PageSize * @PageNumber
如果是永久价值 如果TOP2000是一个永久值,则可以使用它。不要忘记ORDER BY,它可以指定要显示的记录的优先级

SELECT TOP 2000 * 
FROM [AlarmsHistory] 
WHERE (DATEPART (year, StartTime) = {0}) 
    AND (DATEPART (month, StartTime) = {1}) 
    AND (DATEPART (day, StartTime) = {2} )
ORDER BY StartTime DESC -- don't forget about an order, it matters for TOP
如果值不同(从SQL Server 2012开始) 页码等于1的分页查询like:

DECLARE @PageSize INT = 2000;
DECLARE @PageNumber INT = 1;

SELECT * 
FROM [AlarmsHistory] 
WHERE (DATEPART (year, StartTime) = {0}) 
    AND (DATEPART (month, StartTime) = {1}) 
    AND (DATEPART (day, StartTime) = {2} )
ORDER BY StartTime DESC
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY;
在此处阅读有关偏移/提取的更多信息:

如果值不同(服务器版本低于SQL server 2012) 没有
偏移量
/
获取下一行
,因此使用CTE和
行号()覆盖(ORDER BY…
为结果集中的每一行提供
行号
,然后查询必要的范围。这种方法也用于SLQ服务器的旧版本中的分页,因此我使用
@PageSize
@PageNumber
变量来显示通用解决方案。你绝对可以缩短它

DECLARE @PageSize INT = 2000;
DECLARE @PageNumber INT = 1;

WITH NumberedRows AS
(
    SELECT
        ROW_NUMBER() OVER(ORDER BY StartTime DESC) AS RowNumber,
        * 
    WHERE DATEPART(year, StartTime) = {0}
        AND DATEPART(month, StartTime) = {1} 
        AND DATEPART(day, StartTime) = {2}
    FROM [AlarmsHistory]
)
SELECT *
FROM NumberedRows
WHERE RowNumber
    BETWEEN @PageSize * (@PageNumber - 1) + 1
    AND @PageSize * @PageNumber
试试这个:

SELECT TOP 2000 * 
FROM [AlarmsHistory] 
WHERE (DATEPART (year, StartTime) = {0}) 
AND (DATEPART (month, StartTime) = {1}) 
AND (DATEPART (day, StartTime) = {2} )
ORDER BY StartTime
使用TOP可以指示查询结果记录的最大限制

希望能有所帮助。

试试这个:

SELECT TOP 2000 * 
FROM [AlarmsHistory] 
WHERE (DATEPART (year, StartTime) = {0}) 
AND (DATEPART (month, StartTime) = {1}) 
AND (DATEPART (day, StartTime) = {2} )
ORDER BY StartTime
使用TOP可以指示查询结果记录的最大限制



希望有帮助。

选择top 2000…
在这里检查,很简单:
选择top 2000…
在这里检查,很简单:正确,但我认为你的意思是top 2000与5000如果你想写一个非常好的答案,告诉读者
top
是特定于SQL Server的,但是
OFFSET
/
fetchnext
是ANSI SQL!什么意思?一些dbms产品都有这种语法。@jarlh,我的意思是SQL Server 2012版本之前的SLQ Server不支持
偏移量
/
FETCH
是的,我知道。没错,但我认为你的意思是TOP 2000与5000如果你想写一个非常好的答案,告诉读者
TOP
是SQL Server特有的,但是
OFFSET
/
fetchnext
是ANSI SQL!什么意思?一些dbms产品都有这种语法。@jarlh,我的意思是SQL Server 2012版本之前的SLQ Server不支持
偏移量
/
获取
是的,我知道。PS:我使用SQL Server Compact。我的查询是“从[AlarmsHistory]中选择前10个*,其中(DATEPART(year,StartTime)=2017)和(DATEPART(month,StartTime)=2)以及(DATEPART(day,StartTime)=20)按StartTime排序”,但当我开始填写“SqlSartaAdapter”时出错:“解析查询时出错。[Token line number=1,Token line offset=12,Token in error=10]“@fede186 SQL Server Compact的哪个版本?请尝试使用..TOP(10)…(带括号的数字)PS:我使用SQL Server Compact。我的查询是“从[AlarmsHistory]中选择前10*,其中(DATEPART(year,StartTime)=2017)和(DATEPART(month,StartTime)=2)和(DATEPART(day,StartTime)=20)ORDER BY StartTime“但当我开始填写'SqlDestaeAdapter goes error'时:“分析查询时出错。[令牌行编号=1,令牌行偏移量=12,令牌出错=10]”@fede186 SQL Server Compact的哪个版本?请尝试使用..TOP(10)…(带括号的编号)