4

sp_addlinkedserver を使用してリモート マシンのデータベースにアクセスしました。現在、データベースに対して明示的にクエリを作成しています。

select * from [server\instance].database.owner.tablename

これで、

  1. [Server\instance] : これは明示的に指定する必要があります
  2. [データベース] : ms_ForEachDB のようなクエリを使用して、指定したインスタンスのデータベースを検索できますか?
  3. [所有者] : クエリを使用してデータベースの所有者名を見つけることができますか?

これらの値がクエリを使用して見つかった場合、EXEC() を使用してこれを実行する必要がありますか?

皆さんありがとう、

4

4 に答える 4

8

あなたが言及する「素敵な」フォーマットは、単に4つの部分のオブジェクト参照です。

select * from [server\instance].database.owner.tablename

3パート

select * from database.owner.tablename

2部

select * from owner.tablename

サーバー、データベース、またはスキーマの値のいずれかを動的に変更する場合は、次の 1 つのオプションがあります。

EXEC (@sqlstring)

ただし、ストアド プロシージャにリモートでのみアクセスする場合は...

DECLARE @RemoteSP varchar(500)

SET @RemoteSP = '[server\instance].database2.schema.proc2'
EXEC @RemoteSP @p1, @p2, @p3 OUTPUT

SET @RemoteSP = '[server\instance].database1.schema.proc1'
EXEC @RemoteSP @p4, @p5, @p6 OUTPUT

ただし、オブジェクト参照のコンポーネントを変更することは、ほぼ間違いなく意味がありません。テーブルにクエリを実行することがわかっている場合は、そのデータベースでそのテーブルを呼び出すだけです...

于 2010-02-28T09:10:23.920 に答える
2

クエリ文字列を作成してから、関数で実行する必要がありますexec()

サーバー名の取得:

SELECT @@SERVERNAME

現在のデータベース名を取得しています:

SELECT DB_NAME() AS DataBaseName
于 2010-02-27T11:50:55.710 に答える
0

使用する必要はありませんが、EXEC次のようなものを使用できますが、select * from openquery(MyLinkedServer,@sql)私は好みますEXEC(@sql) AT MyLinkedServer

しかし、すべての仕事

于 2010-03-01T11:58:32.183 に答える
0

引数にある種の変数を使用する必要がある場合(たとえば、昨日以降のリモート サーバーの更新を収集する場合):

DECLARE @yesterday NVARCHAR(20) = '2016-09-23 08:16:20';
DECLARE @sql NVARCHAR(MAX) = N'SELECT * FROM database.targetTable AS origin
                          WHERE origin.columnWithDateTime >'''+@yesterday+''';';
PRINT @sql;
EXEC(@sql) AT linkedServer

______

ここで:

database.targetTable : SSMS 2008 R2 を [database].[targetTable] と記述した場合、何らかの理由でエラーが返されますが、その理由がわかりません。

@yesterday : 挿入する変数です (この場合、datetime のような要素を含む文字列)

PRINT @sql : 引用符が正しく配置されているかどうかを確認するだけです。

columnWithDateTime : datetime形式の列("timestamp" など、@yesterday変数形式に類似) である必要があります。

「OPENQUERY は引数に変数を受け入れません。」:こちらを参照してください(MSDN: OPENQUERY (Transact-SQL))。

于 2016-09-27T14:20:33.213 に答える