リンクサーバー上にデータベースを作成する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の一部ではなく、特定のユーティリティによってのみ認識されます。
したがって、テーブルを作成するために別のスクリプトを実行する必要がある場合があります。