2011-01-31 9 views
2

私は、それが1つの行に三つの変数を返すSQL Server 2005でストアドプロシージャを有し、この(非常に簡略化された)の例のように外部アプリケーションにおいてtempを使用せずにストアドプロシージャの結果セットから1つの列をSELECTする方法テーブル?

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 

、私は、ストアドプロシージャおよびプロセスを実行する必要3つの値のうちの1つ。このアプリケーションの制限により、常に最初の列のみが使用されます。

私が探しているのは、プロシージャーの結果セットを1つの列に限定するか、列の順序を並べ替える方法です。

IIRC MySQLは、以下のようなサブクエリをサポートしていますが、SQL Serverがない:

SELECT col1 FROM (EXEC proc1) 

私は結果をバッファする一時テーブル(またはテーブル変数)を使用して、1列を選択することができることを知っているが、私はこれ以上「凝縮」方法があることを願っています:あなたが与えることができる任意のヒントを事前に

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 

おかげで、

パトリック

答えて

1

ストアドプロシージャをtable valued functionに変換できれば、そこから任意の列を選択できます。ストアドプロシージャ(変更できない他のシステムの場合)が必要な場合は、そのロジックをすべて関数に入れ、ストアドプロシージャを呼び出して呼び出すことができます。

それ以外の場合は、ストアドプロシージャからコードを再配置できない場合は、一時表を使用することが最善の方法です。恐れがあります。

+0

ありがとう、テーブル値関数のヒントは本当に私を助けました。私は彼らが存在していることを知らなかった。 –

関連する問題