|
|
1
4
我个人倾向于双查询方法,是的,你必须在两个地方维护搜索逻辑,但我发现性能优化的好处和代码的整体清洁度最终会得到回报。 使用传递给单个过程的标志是一种潜在的解决方案,但我发现这很难维护,尤其是对于复杂的搜索逻辑。 使用临时表等的方法,只会增加比所需更多的开销。 因此,为什么我选择了双查询方法。我在网上找到的所有东西都推荐这种方法。 |
|
|
2
2
这不是一个正常的问题,你通常希望在获得页面的同时获得总计数。 也就是说,使用两种不同的程序。原因是你有两种截然不同的行为,只是表面上相似。 |
|
|
3
2
我相信你已经考虑过这一点:如果数据正在更改COUNT,那么任何后续的实际分页都可能不同(如果添加/删除行) 您可以使用一个用户定义函数来返回匹配行的PKs,这相对容易实现 SELECT COUNT(*) FROM dbo.MyQueryFunction(@Param1, @Param2) 计算一下,然后 SELECT Col1, Col2, ...
FROM dbo.MyQueryFunction(@Param1, @Param2) AS FN
JOIN dbo.MyTable AS T
ON T.ID = FN.ID
... more JOINs ...
以获取数据。 不知道这与Row_Number在后续分页中有多好,但它会保留MyQueryFunction中包含的实际“查询逻辑”——你仍然会在Sproc和Function中重复检索任何列的所有JOIN。 |
|
|
4
1
|
|
|
5
1
我发现这个线程在研究其他东西,我想我应该提到,通过一个查询可以返回结果集和记录计数。您只需要一个“out”参数来携带该值。下面是一个Oracle示例的复制/粘贴,但SQL Server的技术非常相似(我无法访问SQL Server atm)。 SQL Server的一大特点是,您可能需要使用row_number()与rownum。
|
|
|
6
0
我知道这是一个老问题(已经标记了),但您可以返回一个记录集(也称为结果)并具有一个OUTPUT(或多个输出)值,这意味着您只需要一次往返数据库的操作。 这是我大声想出来的(而且已经过了我的就寝时间……)
HTH。 |