Хранимая процедура: вернуть несколько столбцов вместо нескольких наборов записей? - PullRequest
0 голосов
/ 15 сентября 2009

Вероятно, это действительно простой вопрос, но я не часто пишу хранимые процедуры, и я немного озадачен ...

После выполнения различных действий завершающий бит SP завершается возвратом отсчетов или сумм из нескольких разных таблиц. Очевидный подход:

select SUM(ThisCol) as ThisResult from...
select SUM(ThatCol) as ThatResult from...
select count(DISTINCT OtherCol) as OtherResult from...

Конечно, это создает несколько наборов записей - по одному для каждого выбора плюс один, содержащий ноль. Это немного глупо, поскольку каждый набор записей содержит ровно одно значение. Я бы предпочел вернуть один набор записей с несколькими столбцами: ThisResult, ThatResult и OtherResult.

Это возможно?

Ответы [ 3 ]

2 голосов
/ 15 сентября 2009

Вы можете использовать переменные

DECLARE @thisResult INT
DECLARE @thatResult INT
DECLARE @otherResult INT

select @thisResult = SUM(ThisCol) as ThisResult from...
select @thatResult = SUM(ThatCol) as ThatResult from...
select  @otherResult = count(OtherCol) as OtherResult from...

SELECT  @thisResult AS 'thisResult', @thatResult AS 'thatResult', @otherResult AS 'otherResult'
1 голос
/ 15 сентября 2009
SELECT T1.ThisResult, T2.ThatResult, T3.OtherResult
  FROM (select SUM(ThisCol) as ThisResult from...) T1,
       (select SUM(ThatCol) as ThatResult from...) T2,
       (select count(DISTINCT OtherCol) as OtherResult from...) T3

Поскольку каждая таблица содержит только 1 столбец и 1 значение, вы выполняете перекрестное объединение всех 3 и помещаете каждое значение в столбец в таблице результатов.

0 голосов
/ 15 сентября 2009

Если вы используете SQL Server, вы можете снова выбрать эти величины в качестве последнего утверждения.

Select ThisResult, ThatResult, OtherResult

Вам не нужно указывать таблицу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...