如何在SQL Server 2008中同时执行两个命令

时间:2011-09-05 18:01:02

标签: sql sql-server-2008 paging

如何在SQL Server中同时执行两个命令?

我想根据行数得到一个表的行数和一些行。例如,我想得到一个表的行数,并假设我想在一个页面上获得最后50行。

我该怎么做?


编辑1)

考虑到我首先得到计数并且它返回给我100并且我想要获得80到100个记录,此时另一个tansaction可能会删除70到100个记录并且我无法获得适当的记录

4 个答案:

答案 0 :(得分:2)

您的要求是高效还是执行单个命令?这些并不一定会产生同样的结果。有关实施高效分页的良好讨论,请参阅this articlethis 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