これと同様に構造化されたストアドプロシージャがいくつかあります。
DECLARE @sql NVARCHAR(MAX)
DECLARE @mdx NVARCHAR(MAX)
CREATE table #result
(
[col1] NVARCHAR(50),
[col2] INT,
[col3] INT
)
SET @mdx = '{some dynamic MDX}'
SET @sql = 'SELECT a.* FROM OpenQuery(LinkedAnalysisServer, ''' + @mdx + ''') AS a'
INSERT INTO #result
EXEC sp_executesql @sql
SELECT * FROM #result
これは、結果がキューブに存在する場合に非常にうまく機能します。ただし、OpenQuery の結果が空の場合、INSERT は次のエラーで失敗します。
列名または指定された値の数がテーブル定義と一致しません。
私の質問は、このシナリオを処理する最善の方法は何ですか? 私は結果を静的レポート ファイル (.rdlc) で使用しているため、一時テーブルの明示的な入力が (確かに) 必要です。