2013-10-25 2 views
0

Я борюсь с with clause два возвращают результирующий набор, а также задают переменную sql. Или как-то я просто хочу получить два результата от with clause. My SQL запрос:SQL с условием множественных результатов

declare @total as int 

;with T as 
(
    // some sql query 
) 
select * from T 

выше запрос возвращает набор результата, но я также хочу, чтобы установить @total (количество строк в Т).
Возможно ли это? Спасибо

Здесь также способ сделать это два типа:

;with T as 
    (
     select count(1), * from table1 
    ) 
    select * from T 

Но его не подходящий способ сделать это, потому что он будет возвращать count в column.

+0

Зачем вам нужен общий счет изнутри CTE, так как он будет доступен во внешнем выборе: 'select * from T'. – TechDo

+0

@techdo: from external select i only можно получить только одно значение, либо результат, но я хочу оба. –

ответ

1

Это не ясно, как ты называешь это из вашего вопроса. Это через хранимую процедуру, ADO.NET или что-то еще вместе?

Я не уверен, как вы ожидаете получить переменную, установленную в CTE. Я не знаю, как это сделать.

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

В качестве альтернативы вы можете использовать @@ ROWCOUNT после выбора результатов из CTE. See this SO post в качестве примера.

Тестирование @@ ROWCOUNT с помощью приведенного выше примера дает результаты и отдельный счет возвращенных результатов. Смотри ниже;

DECLARE @Total AS INT 

;WITH T AS 
(
SELECT 2 AS a 
UNION 
SELECT 4 
UNION 
SELECT 6 
UNION 
SELECT 8 
) SELECT * FROM T 

SET @Total = (SELECT @@ROWCOUNT) 

SELECT @Total 
+0

только то, что мне нужно !!. Спасибо @Mr Moose. –

+0

Нет проблем. Рад, что я мог бы помочь. –

+0

Я привел пример использования предложения WITH для создания временной статической таблицы с использованием аналогичного подхода: http://www.giombetti.com/2014/02/14/using-sql-with-clause-to -create-временного статическому таблицы-в-запроса времени / –

1

Пожалуйста, попробуйте ниже запрос:

select 
    count(*) over() [Count], 
    * 
From T 
+0

Я думаю, что я уже предлагал этот способ как неприемлемый в моем вопросе выше, Пожалуйста, смотрите. Спасибо –

Смежные вопросы