テーブルとビューのみへの接続をサポートするアプリケーションからストアド プロシージャを実行しようとしています。私の回避策は、Openrowset() を介して SP から結果を取得するビューを使用することでした。SP が #temp テーブルを使用して中間結果を保存していることがわかりました。これは、分散クエリではサポートされていないように見える DDL 操作です。#temp を @temp テーブル変数に置き換えることはできますが、コード全体の速度が大幅に低下します (速度を上げるために一括挿入 (t1 から #temp に * を選択) を使用していました)。
私が得ているエラーメッセージは
オブジェクト "exec DW.dbo.TestSpWithTempTable" を処理できません。リンク サーバー "(null)" の OLE DB プロバイダー "SQLNCLI10" は、オブジェクトに列がないか、現在のユーザーがそのオブジェクトに対するアクセス許可を持っていないことを示しています。
とにかく、SP で #temp テーブルを使用して、OpenRowSet を使用してビューから呼び出すことができますか?
CREATE PROC TestSpWithTempTable
AS
Select distinct TxnType into #txnTypes from Transactions
-- lot of other stuffs going on here
select TxnType from #temp
GO
私が作成したビューは次のとおりです。
CREATE VIEW SelectDataFromSP
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=(local);TRUSTED_CONNECTION=YES;',
'exec DW.dbo.TestSpWithTempTable') AS a
動作するが遅いコードは
CREATE PROC TestSpWithTempTable
AS
declare @TxnTypes table(TxnType varchar(100))
insert into @TxnTypes
Select distinct TxnType from Transactions
-- lot of other stuffs going on here
select TxnType from @TxnTypes
GO