如何在SQL Server中同时执行两个命令?
我想根据行数得到一个表的行数和一些行。例如,我想得到一个表的行数,并假设我想在一个页面上获得最后50行。
我该怎么做?
编辑1):
考虑到我首先得到计数并且它返回给我100并且我想要获得80到100个记录,此时另一个tansaction可能会删除70到100个记录并且我无法获得适当的记录
答案 0 :(得分:2)
您的要求是高效还是执行单个命令?这些并不一定会产生同样的结果。有关实施高效分页的良好讨论,请参阅this article和this follow-up discussion。不要重新发明轮子,也不要假设处理这两者的单个命令必然比任何其他解决方案更有效。
答案 1 :(得分:1)
select * from tableName1 where column1=(select count(*) from tableName2)
答案 2 :(得分:1)
如果我理解正确,你想要一个查询来计算表中所有记录的数量,同时只获得50行。 你可以这样做:
Select Top 50 Column1, column2, (Select count(ID) from table1) as total from Table1
就个人而言,我更愿意执行两个查询。一个用于计数,一个用于前50行(效率更高的imo)
答案 3 :(得分:1)
内联计数可以多次评估或者可能会给出不同的结果。单独的CROSS JOIN方法将在某些时候给出不同的结果
请参阅repro脚本的原因:can I get count() and rows from one sql query in sql server?
;WITH aCTE AS
(
SELECT
*,
COUNT(*) OVER () AS TotalRows,
ROW_NUMBER OVER (ORDER BY SomeLatest DESC) AS rn
FROM
MyTable
) foo
SELECT
*
FROM
foo
WHERE
rn <= 50