ローカル インスタンスへのループバック リンク サーバーを作成し、データ アクセスが有効になっていることを確認します。という名前のローカル インスタンスがあるとしますYourServer\SQL2008
。
USE [master];
GO
EXEC sp_addlinkedserver
@server = N'LoopbackLocal',
@srvproduct = N'',
@provider = N'SQLNCLI',
@datasrc = N'.\SQL2008',
@catalog = N'tempdb';
GO
EXEC sp_serveroption
@server = N'LoopbackLocal',
@optname = N'collation compatible',
@optvalue = N'true';
GO
EXEC sp_serveroption
@server = N'LoopbackLocal',
@optname = N'data access',
@optvalue = N'true';
GO
EXEC sp_addlinkedsrvlogin
@rmtsrvname = N'LoopbackLocal',
@locallogin = NULL ,
@useself = N'True';
GO
-- you may need to configure other security here
その後OPENQUERY
、アドホック クエリであるかのようにストアド プロシージャを実行するために使用できます。
SELECT COUNT(*)
FROM OPENQUERY
(
LoopbackLocal,
'EXEC dbo.my_sp'
) AS y;
ここで、dbo.my_sp
情報を最初に #temp テーブルにダンプすると、問題が発生します。これは、OPENQUERY
処理できるコードのブロックではなくなるためです。たとえば、sp_who2
少なくとも SQL Server 2012 でこの方法を実行しようとすると、使用するように変更されたエラーが発生sp_describe_first_result_set
しOPENQUERY
ます (したがって、これでうまくいくかもしれません。テストする 2008 はありませんが、いつか問題になるでしょう):
メッセージ 11526、レベル 16、状態 1、プロシージャ sp_describe_first_result_set、行 1
... が一時テーブルを使用しているため、メタデータを特定できませんでした。
ただし、これを頻繁に行う場合は、特殊なストアド プロシージャを作成 (またはこれらのストアド プロシージャにオプションを追加) して、カウントのみが返されるようにしてみませんか?