61

ある SQL Server から別の SQL Server にストアド プロシージャ (SP) をコピーする必要がある場合は、SSMS で SP を右クリックし、[ストアド プロシージャのスクリプト] を選択して > [作成] > [新しいクエリ エディター ウィンドウ] を選択します。次に、そのウィンドウを右クリックして [接続] > [接続の変更...] を選択し、新しいサーバーを選択して F5 キーを押して新しいサーバーで作成を実行し、接続を変更します。

私の質問は、「別の SQL Server に接続するための T-SQL 構文は何ですか?」です。これを作成スクリプトの先頭に貼り付けて F5 キーを押して実行すると、新しいサーバーに切り替わり、作成スクリプトが実行されます。

質問を入力しているときに、私がやろうとしていることの背景を教えていただければ、これを達成するためのより迅速でより良い方法を思いつくかもしれないことに気付きました。

4

10 に答える 10

90

SQL Server Management Studio で、[クエリ] メニューから SQLCMD モードをオンにします。次に、スクリプトの先頭に、以下のコマンドを入力します

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]

複数のサーバーに接続している場合は、必ずGO接続間に挿入してください。そうしないと、T-SQL が実行されると考えているサーバー上で実行されません。

于 2010-06-30T21:05:54.120 に答える
52

また、リンク サーバーを含むクエリを記述するときは、次のように角かっこを含めてください。

SELECT * FROM [LinkedServer].[RemoteDatabase].[User].[Table]

少なくとも 2000/2005 では、少なくともサーバー名の周りに [] ブラケットが必要であることがわかりました。

于 2008-09-24T05:04:02.460 に答える
28

更新: 別の SQL サーバーに接続して SQL ステートメントを実行するには、sqlcmd Utilityを使用する必要があります。これは通常、バッチ ファイルで行われます。Management Studio内で実行する場合は、これをxmp_cmdshellと組み合わせることができます。


1 つの方法は、リンク サーバーを構成することです。次に、リンク サーバーとデータベース名をテーブル名に追加できます。(linkedserver.database.dbo.TableName から * を選択)

USE master
GO
EXEC sp_addlinkedserver 
    'SEATTLESales',
    N'SQL Server'
GO
于 2008-09-24T04:52:15.123 に答える
6

質問を言い換えると、DDL でクエリを実行するためにサーバー コンテキストを選択することは可能ですか? 答えはノーです。USE を使用してプログラムで選択できるのは、データベース コンテキストのみです。(サーバーコンテキストを外部で事前に選択済み)

リンクされたサーバーと OPEN QUERY は DDL へのアクセスを提供できますが、文字列としてカプセル化するためにコードを多少書き直す必要があるため、開発/デバッグが困難になります。

別の方法として、外部ドライバー プログラムを使用して SQL ファイルを取得し、OPEN QUERY 経由でリモート サーバーに送信することもできます。ただし、ほとんどの場合、最初にサーバーに直接接続して DDL を評価した方がよいでしょう。

于 2008-09-24T05:06:46.040 に答える
5

別のサーバーからデータを取得しようとするときはいつでも、2 つのステップが必要です。

最初の一歩:

-- Server one scalar variable
DECLARE @SERVER VARCHAR(MAX)
--Oracle is the server to which we want to connect
EXEC SP_ADDLINKEDSERVER @SERVER='ORACLE'

第二段階:

--DBO is the owner name to know table owner name execute (SP_HELP TABLENAME)    
SELECT * INTO DESTINATION_TABLE_NAME 
FROM ORACLE.SOURCE_DATABASENAME.DBO.SOURCE_TABLE
于 2011-11-18T12:02:06.587 に答える
4

複数のサーバーに接続している場合は、サーバーを切り替える前に「GO」を追加する必要があります。そうしないと、SQL ステートメントが間違ったサーバーに対して実行されます。

例えば

:CONNECT SERVER1
Select * from Table
GO
enter code here
:CONNECT SERVER1
Select * from Table
GO

http://www.sqlmatters.com/Articles/Changing%20the%20SQL%20Server%20connection%20within%20an%20SSMS%20Query%20Windows%20using%20SQLCMD%20Mode.aspx

于 2014-04-07T16:03:27.047 に答える
2

リンク サーバーを作成してから ( sp_addlinkedserver で実行できます)、 OPENQUERYを使用してみてください。

于 2008-09-24T04:51:14.767 に答える
-1

可能であれば、SSIS (SQL Server Integration Services) を確認してください。私はこのツールキットに足を踏み入れたばかりですが、すでに 40 以上のサーバーをループしており、あらゆる種類の大混乱をもたらす準備をしています ;)

于 2010-06-17T20:11:46.093 に答える