TSQL:TOP的动态值

Moo*_*oon 3 sql t-sql sql-server sql-server-2005 sql-server-2008

我需要允许用户查询所有或一些记录.现在我这样做:

DECLARE @Limit INT = NULL

IF @Limit IS NULL SELECT @Limit = COUNT(ID) FROM vwNotifications

SELECT TOP (@Limit) ROW_NUMBER() OVER(ORDER BY Type, CreatedBy DESC) AS Row, Title
FROM vwNotifications
Run Code Online (Sandbox Code Playgroud)

有没有办法可以在不使用COUNT查询的情况下执行此操作?

SQL*_*ace 5

你有两个选择

如果它是0,那么最重要的是20亿,但是再次......你真的想在1次投篮中返回20亿行吗?

DECLARE @Limit INT = NULL

SELECT @Limit = COALESCE(@Limit, 200000000)

SELECT TOP (@Limit) ROW_NUMBER() OVER(ORDER BY Type, CreatedBy DESC) AS Row, Title
FROM vwNotifications
Run Code Online (Sandbox Code Playgroud)

或者做一个if else

DECLARE @Limit INT = NULL

IF @Limit IS NULL

SELECT  ROW_NUMBER() OVER(ORDER BY Type, CreatedBy DESC) AS Row, Title
FROM vwNotifications

else

SELECT TOP (@Limit) ROW_NUMBER() OVER(ORDER BY Type, CreatedBy DESC) AS Row, Title
FROM vwNotifications
Run Code Online (Sandbox Code Playgroud)