ここに問題があります。Sql Serverストアドプロシージャの結果セットの結合
標準化されたデータを標準データセットに変換するストアドプロシージャがあります。
ビューと、異なるパラメータを持つストアドプロシージャの2つのデータセットと、異なる列を返すストアドプロシージャに送信されるデータについて報告する必要があります。
例私のビューのようなものが含まれる場合
:
ID Title Status Date
1 How To Party Like a rockstar Approved 7/15/1989
2 Too much of a good thing Approved 7/25/2001
3 Needs More Cowbell Denied 11/11/2011
4 Here Today Gone Tommorrow Approved 8/13/1969
5 The way She moves Approved 12/13/2011
そして、もう一つのparamaterリターンと手順の実行:
ID Do you like the ice Cream? How much would you pay for the ice cream?
1 Yes 2
2 Yes 5
3 Yes 7
4 No 2
5 No 3
そして、異なるパラメータを返すと同じ手順の実行を:
ID Total Number of Bell Peppers Total Number of Apples Total Number of Oranges
1 7 6 6
2 6 8 8
3 32 7 5
4 7 3 1
5 12 1 1
ストアドプロシージャが原因にインラインSQLで行うことができないことを念頭に置い
ID Title Status Date Do you like the ice Cream? How much would you pay for the ice cream? Total Number of Bell Peppers Total Number of Apples Total Number of Oranges
1 How To Party Like a rockstar Approved 7/15/1989 Yes 2 7 6 6
2 Too much of a good thing Approved 7/25/2001 Yes 5 6 8 8
3 Needs More Cowbell Denied 11/11/2011 Yes 7 32 7 5
4 Here Today Gone Tommorrow Approved 8/13/1969 No 2 7 3 1
5 The way She moves Approved 12/13/2011 No 3 12 1 1
キーピングを:私は得ることについて移動する方法を、ID列は、データセットを結合するために使用することができますキーであると仮定すると
正規化の性質と正規化の変換について説明していますが、ストアドプロシージャは、そのときに渡されるパラメータに応じて可変数の列を返すため、テーブル変数udfとして実行することはできません。それは実行されている(誰かがこれについて間違っていると私を指摘することができ、動的な列テーブル値のudfの方に私は非常に感謝するだろう)。
もし私がどこかでビューと2つのストアドプロシージャを1つのストアドプロシージャに持ってきて、そのような方法でデータセットを返せば、それが私の最終目標になります。私もそのアドホック分散クエリはこのサーバー(ない私の決定)にオンにすることはできません言及する必要がある
解像度
スチュアートエインズワースの答えから少し助けを借りて、私は仕事をすることができましたそれを出す。全体としての私の最初の問題は、各クロス集計表に対して列が動的であることでした。その一環として、私はこのケースでは9は、私は私が構築していた項目を知ることができますパラメータは、カンマ区切りの文字列としての列が返される関数...
DECLARE
@PivotColumns VARCHAR(MAX)
SET @PivotColumns = dbo.fnGetFormPivotColumns(9)
を作成していたので、 。そこから、私はこの思い付いたように、動的に一時テーブルを構築するための基本SPでの機能のほんの繰り返しだった:
IF object_id('tempdb..#temp_DEP') IS NOT NULL
DROP TABLE #temp_DEP
CREATE TABLE #temp_DEP (APPLICATION_ID int)
EXEC ('ALTER TABLE #temp_DEP ADD ' + @PivotColumns)
INSERT INTO #temp_DEP
EXEC GetFormCrossTab 9
単純なSELECT * FROM #temp_DEP私はまさに私得ていることを示しています欲しいです。
私がしなければならないことは、他のパラメータの処理を繰り返すことと同じストアドプロシージャ内に2つのデータセットを取得することだけです。
を私はあなたに実行される課題は、procのからあなたの可変出力だと思います。 http://stackoverflow.com/questions/653714/how-to-select-into-temp-table-from-stored-procedure形状が一貫していれば、結果を表に挿入して、そのような結果をまとめることができます。それ以外の場合は、コピー・ペーストの継承を見て、すべてのロジックをまとめてみてください。 – billinkc
残念なことに、Ad Hoc分散クエリがオフになっていて、私はそれを有効にできませんので、openrowset/opendatasourceはオプションではありません。 – Patrick