从临时表中排序查询的结果

时间:2009-01-15 19:20:57

标签: sql sql-server

我有一个SQL查询,我将在网上传输相当数量的响应数据,但我希望尽快获得总行数,以便在UI中进行绑定。基本上我需要获得满足特定条件的所有行的快照,然后能够翻阅所有结果行。

以下是我目前的情况:

SELECT --primary key column
INTO #tempTable 
FROM --some table 
--some filter clause
ORDER BY --primary key column

SELECT @@ROWCOUNT

SELECT --the primary key column and some others
FROM #tempTable
JOIN -- some table

DROP TABLE #tempTable

每隔一段时间,查询结果就会出现故障(大概是因为我正在从临时表中进行无序选择)。

在我看来,我有几个选择:

  1. 从临时表中选择第二个order by子句。
  2. 将order by子句移动到第二个选择,让第一个选择无序。
  3. 使用主键列创建临时表以强制临时表的排序。
  4. 这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

使用数字2.仅仅因为你在表上有一个主键并不意味着将对select语句的结果集进行排序(即使你实际看到的是这样)。

将数据放入临时表时无需对数据进行排序,因此请将其取出。无论如何,你都会获得相同的@@ ROWCOUNT值。

这样做:

SELECT --primary key column
INTO #tempTable 
FROM --some table 
--some filter clause


SELECT @@ROWCOUNT

SELECT --the primary key column and some others
FROM #tempTable
JOIN -- some table
ORDER BY --primary key column

DROP TABLE #tempTable

答案 1 :(得分:1)

将订单从第一个选择移动到第二个选择。

数据库不是电子表格。您不会以特定顺序将数据放入表

请确保在退回时正确订购。

答案 2 :(得分:-3)

我个人会按照你想要的顺序选择数据。因此,在您的第一个选择中,请按顺序排序。这样它就可以利用任何现有的索引和访问路径。