2009-07-29 50 views

答えて

3

がこれをしようとした場合、これはほんの一例ですが、私は一般的な解決策が欲しい:

-- add 'loopback' linkedserver 
if exists (select * from master..sysservers where srvname = 'loopback') 
    exec sp_dropserver 'loopback' 
go 
exec sp_addlinkedserver @server = N'loopback', 
    @srvproduct = N'', 
    @provider = N'SQLOLEDB', 
    @datasrc = @@servername 
go 

select * into #t from openquery(loopback, 'set fmtonly on exec sp_who') 
select * from #t 
drop table #t 
go 
+0

これは、なぜこれがSQL Serverの唯一の方法である場合、あなたが望むものを正確に行うことができるのですか? –

+0

賢明ではありませんが、いくつかの理由があります。オープンクエリはセキュリティ上の問題になる可能性があります。したがって、多くのシステムではスイッチがオフになっています。リンクされたサーバーを作ることは、この問題のために不当です。 IMHOあなたは完全に真である – onupdatecascade

+1

を見ることを期待しない、リンクサーバーとオープンクェリーの「副作用」を使用しています。私はOPには、ストアドプロシージャの正確な出力を常に把握していない状況があると想定しています。あなたがそれを知っていれば、まず宣言テーブルを宣言し、sprocから挿入することは素晴らしい解決策です。そうでなければ、私の提案は唯一実行可能な方法です。 –

12

ストアドプロシージャの結果をテンポラリテーブルまたはテーブル変数に格納してから、そのテーブルをクエリし、必要なwhere句を適用することができます。

[編集]このよう

:あなたは、もちろん、あなたがフィルタリングしたいと思うものにその最終節を変更します

DECLARE @foo TABLE 
(
SRV_NAME NVARCHAR(100), 
SRV_PROVIDERNAME NVARCHAR(100), 
SRV_PRODUCT NVARCHAR(100), 
SRV_DATASOURCE NVARCHAR(100), 
SRV_PROVIDERSTRING NVARCHAR(100), 
SRV_LOCATION NVARCHAR(100), 
SRV_CAT NVARCHAR(100) 
) 

INSERT INTO @foo 
EXEC sp_linkedservers 

SELECT * FROM @foo WHERE SRV_PRODUCT = 'SQL Server' 

+0

どうすればいいですか? –

+0

SQL 2000では、テーブル変数 – JNappi

+1

の代わりに一時テーブルを使用する必要があり、結果セットのスキーマを宣言しないで実行する方法はありませんか? –

0

ストアドプロシージャをテーブル値のユーザー定義関数に移動します。既存のストアドプロシージャを保持しますが、ロジックを複製するのではなく、この新しい関数を呼び出すだけです。次に、クエリで関数を使用します。

+0

これはシステムストアドプロシージャです。それを変更することはできません。 – onupdatecascade

+0

また、ストアドプロシージャがテンポラリテーブルを使用する場合、これは機能しない可能性があります。ユーザー定義関数は一時表を使用できないためです。 – yucer

1

一般的な解決策ではなく、質問に記載されている正確な目的のために、sys.servers(SQL 2005+)(またはsysservers pre 2005)を照会するだけで、sp_linkedserversを使用する必要はありませんプロシージャ:

-- SQL 2005+ 
IF EXISTS (SELECT 1 FROM sys.servers WHERE name = 'myServer') 
    PRINT N'dropping linked servers' 
GO 

-- SQL 2000 
IF EXISTS (SELECT 1 FROM sysservers WHERE srvname = 'myServer') 
    PRINT N'dropping linked servers' 
GO 
関連する問題