Как выполнить две команды одновременно в SQL Server 2008 - PullRequest
0 голосов
/ 05 сентября 2011

Как я могу выполнить две команды одновременно в SQL Server?

Я хочу получить количество строк в таблице и несколько строк в соответствии с количеством строк. Например, я хочу получить количество строк в таблице и предположить, что я хочу получить последние 50 строк на одной странице.

Как я могу это сделать?


РЕДАКТИРОВАТЬ 1) :

Учтите, что я сначала получаю счет, и он возвращает мне 100, и я хочу получить от 80 до 100 записей, в этот момент другая операция может удалить от 70 до 100 записей, и я не могу получить соответствующие записи

Ответы [ 4 ]

2 голосов
/ 05 сентября 2011

Требуется ли вам быть эффективным или выполнять одну команду? Это не обязательно приводит к тому же самому. Для хорошего обсуждения по внедрению эффективной подкачки см. эту статью и это последующее обсуждение . Не изобретайте колесо заново и не предполагайте, что одна команда, которая обрабатывает оба, обязательно будет более эффективной, чем любое другое решение.

1 голос
/ 05 сентября 2011

Встроенный счетчик может оцениваться много раз или может давать разные результаты.Отдельный подход CROSS JOIN будет давать разные результаты в какой-то момент

Узнайте, почему с помощью сценария repro: можно ли получить count () и строки из одного SQL-запроса на SQL-сервере?

;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
1 голос
/ 05 сентября 2011

Если я правильно понимаю, вам нужен запрос, который делает подсчет всех записей в таблице и в то же время получает только 50 строк.Вы можете сделать это примерно так:

Select Top 50 Column1, column2, (Select count(ID) from table1) as total from Table1

Лично я предпочел бы выполнить два запроса.Один для подсчета и один для первых 50 строк (намного эффективнее, по моему мнению)

1 голос
/ 05 сентября 2011
select * from tableName1 where column1=(select count(*) from tableName2)
...