TSQL SELECT TOP(如果标志=真则限制,否则无限)

Posted

技术标签:

【中文标题】TSQL SELECT TOP(如果标志=真则限制,否则无限)【英文标题】:TSQL SELECT TOP(if flag=true then Limit, ELSE unlimited) 【发布时间】:2016-01-30 18:11:36 【问题描述】:

我有一个存储过程,如果设置了输入参数标志,我想限制返回的记录数。如果标志为假,我希望 SELECT 语句返回无限数量的记录。我想以最具成本效益的方式实现这一目标。比如:

当@flagLimit THEN TOP(@limit) 时选择 CASE
                 其他 [无限]
从我的表...

【问题讨论】:

【参考方案1】:

如果你愿意使用百分比,那么

SELECT TOP(@limit)PERCENT

你可以只通过 100

如果你必须传递一个数字,那么你可以传递一个 0 来表示 100% 并且任何不同的东西都会根据 count(*) 计算一个百分比,但是你必须运行两次基本查询

【讨论】:

这个答案对我来说效果很好,因为使用百分比不是问题。这在执行方面是否与上述 jpw 的方法一样有效? 我只是不知道。你应该同时测试它们。 感谢@Frisbee,这种方法似乎运行良好,不会减慢我的原始查询速度,也不必在两个单独的 SELECT 语句中复制所有查询文本。【参考方案2】:

也许if 语句会起作用?您可以根据是否设置标志有条件地选择不同的语句来执行。像这样的:

if @flaglimit is not null
select top (@limit) * from myTable
else
select * from myTable

【讨论】:

在 Select 语句之后我有一个相当长且复杂的查询。如果我使用你的方法,我是否必须在两个 Select 语句上复制确切的代码。如果不是,我可能会接受这个答案。【参考方案3】:

如果@limit 为空

从我的表中选择 @limit = COUNT(1)

从我的表中选择顶部(@limit)

【讨论】:

以上是关于TSQL SELECT TOP(如果标志=真则限制,否则无限)的主要内容,如果未能解决你的问题,请参考以下文章

动画绝对定位的div,但如果条件为真则停止?

SQL Server 查询:SELECT 1 WHERE EXISTS vs SELECT TOP 1 1

TSQL:有没有办法限制返回的行并计算在没有限制的情况下返回的总数(不将其添加到每一行)?

如果参数为空,则在 where 语句中的 TSQL 案例

TSQL:避免内联函数中的 MAXRECURSION 限制

TSQL:SELECT CASE WHEN THEN 子查询:错误:子查询返回超过 1 个值