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(如果标志=真则限制,否则无限)的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 查询:SELECT 1 WHERE EXISTS vs SELECT TOP 1 1