Как ВЫБРАТЬ один столбец из результирующего набора хранимой процедуры без использования темп. таблицы? - PullRequest
3 голосов
/ 31 января 2011

У меня есть хранимая процедура в SQL Server 2005. Она возвращает три переменные в одной строке, как в этом (очень упрощенном) примере:

CREATE PROCEDURE proc1
AS
   DECLARE @col1 VARCHAR(4)
   DECLARE @col2 VARCHAR(4)
   DECLARE @col3 VARCHAR(4)
   SET @col1 = 'val1'
   SET @col2 = 'val2'
   SET @col3 = 'val3'

   SELECT @col1 col1, @col2 col2, @col3 col3
GO

Во внешнем приложении мне нужно выполнить хранимую процедуру и обработать одно из трех значений. Из-за ограничений в этом приложении, он всегда будет использовать только самый первый столбец.

Итак, я ищу способ ограничить набор результатов процедуры одним столбцом или изменить порядок столбцов.

IIRC MySQL поддерживает подзапросы, подобные следующим, но SQL Server - нет:

SELECT col1 FROM (EXEC proc1)

Я знаю, что могу использовать временную таблицу (или переменную таблицы) для буферизации результата, а затем выбрать один столбец, но я надеюсь, что есть более «сжатый» способ, чем этот:

CREATE TABLE #tmp (col1 VARCHAR(4) NOT NULL, col2 VARCHAR(4) NOT NULL, col3 VARCHAR(4) NOT NULL)
INSERT INTO #tmp EXEC proc1
SELECT col2 FROM #tmp
DROP TABLE #tmp

Заранее спасибо за любые подсказки, которые вы можете дать,

Patrick

1 Ответ

2 голосов
/ 31 января 2011

Если бы вы могли преобразовать сохраненный процесс в табличную функцию , вы могли бы выбрать произвольные столбцы из этого.Если вам все еще нужен сохраненный процесс (для какой-либо другой системы, которую нельзя изменить), вы можете поместить всю логику в функцию и заставить сохраненный процесс вызвать ее.

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

...