2016-10-17 17 views
1

私は異なるサーバ上に複数のDBを持っており、テーブルからいくつかの情報を取っています(たとえば、このテーブルはすべてのDBにあります)。私はSQLCMDモードを使用するが、私はしません異なるサーバから複数のDBに接続する

(1 row(s) affected) 

:Connect DBServer 
use [DBName] select * from [UserAccount] where userid='myuserid' 
GO 

Msg 102, Level 15, State 1, Line 1 
Incorrect syntax near ':'. 

Msg 911, Level 16, State 1, Line 2 
Database 'DBName' does not exist. Make sure that the name is entered correctly. 

サーバー間の切り替えのために:だから私は、カーソルの上のすべてのサーバーとDBのを追加してから、私はこのスクリプトを実行します。

BEGIN 

fetch next from CursorData into @DBName,@DBServer 

set @cmd=':Connect ' + @DBServer+ CHAR(10) + CHAR(13)+ 'use ['[email protected]+'] select * from [UserAccount] where userid='''[email protected]+'''' + CHAR(10) + CHAR(13)+ 'GO' 

    print @cmd 

exec sp_executeSQL @cmd 

END 

と私はエラーに従ってきました私はそれを文字列にして文字列を実行するときに動作するかどうかを知る。

あれば、私はSQLCMDモードの作業で、このコマンドを実行します。

:Connect DBServer 
use [DBName] select * from [UserAccount] where userid='myuserid' 
GO 

誰もが私が逃したものを知っているか、このための別の解決策を知っている場合。

答えて

0

すべての異なるサーバーに対してLinked Server objectsを作成し、関連するすべてのデータを稼働中のサーバーにプルし、そこからデータをクエリします。

上記のリンクでは、オブジェクトエクスプローラでServer Objectsを展開し、Linked Serversを右クリックし、適切な接続情報を入力することで、SSMSでこれを行うことができます。

すべてがSQL Serverベースの場合は、[Server].[Database].[Schema].[Table]という表記法でクエリを実行できます。そうでない場合は、OPENQUERYを使用する必要があります。

+0

リンクサーバー以外の解決策を見つける必要があります。 DBAはこれを解決するためにスクリプトなどを書こうとします。 –

+0

@ SilviSSリンクされたサーバーで何が問題になっていますか? SQLCMDで変数を使用する方法について調べましたか?http://dba.stackexchange.com/questions/111339/user-shared-queries-dynamic-sql-vs-sqlcmd? – iamdave

+0

私にとっては、この解決策に間違いはありません。私はリンクされたサーバーオブジェクトを作成できない役割を持っています(私は許されません)。これが別の解決策を見つけようとしている理由です。 –

関連する問題