リンクサーバー上にデータベースを作成する1つの方法は、そのサーバーにジャンプしてローカルに作成することです。
しかし、リンクサーバー上にデータベースを作成するための「2つの方法」の1つとしてそれを含めた場合、おそらく少しだまされたと感じるでしょう。
また、このオプションは、可能であり、実行する意思がある場合は問題ありませんが、この記事では、ローカルサーバーにジャンプせずに、T-SQLを使用してリモートで実行する方法を示します。さらに、この手法は他のサーバーにジャンプするよりも速い場合があります。
「2つの方法」の両方にEXECUTE
が含まれます ステートメント(EXEC
に短縮することもできます )。このステートメントを使用して、リンクサーバーでコードを実行できます。これには、データベースの作成も含まれます。
前提条件
リンクサーバーでストアドプロシージャを実行するには、RPC Outを有効にする必要があります(まだ有効になっていない場合)。
sys.servers
にクエリを実行すると、RPCOutが有効になっているかどうかを確認できます。 カタログビュー。
次のコードは、Homer
と呼ばれるリンクサーバーでRPCOutを有効にします :
EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';
それが有効になったら、先に進んでデータベースを作成できます。
方法1
リンクサーバー上にデータベースを作成する最初の方法は次のとおりです。
EXEC ('CREATE DATABASE Pets') AT Homer;
この例では、Pets
というデータベースを作成します。 Homer
と呼ばれるリンクサーバー上 。
EXECUTE
/ EXEC
ステートメントを使用して、リンクされたサーバーにパススルーコマンドを送信できます。
これを行うには、EXECUTE
の後に括弧で囲んだパススルーコマンドを含めます。 / EXEC
キーワードを入力し、AT LinkedServerName
でフォローアップします 、ここでLinkedServerName
データベースを作成するリンクサーバーの名前です。
したがって、必要なのはCREATE TABLE
を含めることだけです。 このステートメントの引数としてのステートメント。
リンクサーバー名は、リンクサーバーの作成時に付けた名前であることに注意してください。リモートサーバーの実際のサーバー名ではありません。
方法2
2番目の方法は最初の方法と似ていますが、この場合、コマンドをsp_executesql
に渡します。 リモートサーバー上のシステムストアドプロシージャ。
EXEC Homer.master.dbo.sp_executesql N'CREATE DATABASE World;';
これを行うには、リンクサーバーの名前を含む4つの部分からなる名前を使用する必要があります。これを行わないと、sp_executesql
を実行することになります。 リモートサーバーではなくローカルサーバーで。
ステートメントを変数として渡す
CREATE DATABASE
を渡すこともできます EXEC
への変数としてのステートメント ステートメント。
このように:
DECLARE @tsql nvarchar(max);
SET @tsql = 'CREATE DATABASE Pets';
EXEC (@tsql) AT Homer;
ただし、データベースに切り替えてテーブルを作成しようとすると、GO
を追加しても問題が発生する可能性があります。 いつもの場所で。これはおそらくGO
が原因です キーワードは実際にはT-SQLの一部ではなく、特定のユーティリティによってのみ認識されます。
したがって、テーブルを作成するために別のスクリプトを実行する必要がある場合があります。