sql >> データベース >  >> RDS >> Sqlserver

T-SQLを使用してリンクサーバー上にテーブルを作成する2つの方法

    リンクサーバー上にテーブルを作成する必要がある場合は、リモートサーバー上で直接作成するか、ローカルサーバーからスクリプトを実行して作成できます。

    T-SQLを使用してリンクサーバー上にテーブルを作成する2つの方法を次に示します。

    どちらの方法もEXECUTEを使用します / EXEC 声明。ただし、それぞれ異なるアプローチを使用しています。

    前提条件

    リンクサーバーでストアドプロシージャを実行するには、RPC Outを有効にする必要があります(まだ有効になっていない場合)。

    sys.serversにクエリを実行すると、RPCOutが有効になっているかどうかを確認できます。 カタログビュー。

    次のコードは、Homerと呼ばれるリンクサーバーでRPCOutを有効にします :

    EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';

    RPC Outを有効にすると、先に進んでテーブルを作成できます。

    方法1

    最初のアプローチは、ATを使用することです コードを実行するリンクサーバーを指定する引数。この構文により、リンクされたサーバーにパススルーコマンドを送信できます。

    次のようになります:

    EXEC ('
        USE  [Pets];
        CREATE TABLE [dbo].[Cats](
            [CatId] [int] IDENTITY(1,1) NOT NULL,
            [CatName] [varchar](60) NULL
        ) ON [PRIMARY];
    ') AT Homer;

    これにより、Catsというテーブルが作成されます PetsHomerと呼ばれるリンクサーバー上のデータベース 。

    このコードは明らかに、Petsというデータベースがあることを前提としています。 リンクサーバー上。ない場合は、最初に作成する必要があります。

    リンクされたサーバー名(Homer この場合)は、ローカルサーバー内の既存のリンクサーバー定義です。実際のリモートサーバーの名前ではありません。

    方法2

    2番目のアプローチは、sp_executesqlを実行することです。 T-SQLステートメントを渡しながら、リモートサーバー上のシステムストアドプロシージャ。

    このように:

    EXEC Homer.master.dbo.sp_executesql N'
        USE  [Pets];
        CREATE TABLE [dbo].[Dogs](
            [DogId] [int] IDENTITY(1,1) NOT NULL,
            [DogName] [nvarchar](255) NULL,
            [GoodDog] [bit] NULL
        ) ON [PRIMARY];
        ';

    したがって、構文が異なっていても、結果は同じです。さらに、CREATE TABLE リンクサーバーへのアクセス方法に関係なく、構文は変更されません。

    ステートメントを変数として渡す

    CREATE TABLEを渡すこともできます EXECへの変数としてのステートメント ステートメント。

    これは、作成するテーブルやその他のオブジェクトがたくさんある場合に便利です。

    最初の構文を使用した例を次に示します。

    DECLARE @tsql nvarchar(max);
    SET @tsql = '
    USE  [Pets];
    CREATE TABLE [dbo].[Cats](
    	[CatId] [int] IDENTITY(1,1) NOT NULL,
    	[CatName] [varchar](60) NULL
    ) ON [PRIMARY];
    CREATE TABLE [dbo].[Dogs](
    	[DogId] [int] IDENTITY(1,1) NOT NULL,
    	[DogName] [nvarchar](255) NULL,
    	[GoodDog] [bit] NULL
    ) ON [PRIMARY];
    ';
    EXEC (@tsql) AT Homer;

    そして、これは2番目の構文を使用した同等のものです:

    DECLARE @tsql nvarchar(max);
    SET @tsql = '
    USE  [Pets];
    CREATE TABLE [dbo].[Cats](
    	[CatId] [int] IDENTITY(1,1) NOT NULL,
    	[CatName] [varchar](60) NULL
    ) ON [PRIMARY];
    CREATE TABLE [dbo].[Dogs](
    	[DogId] [int] IDENTITY(1,1) NOT NULL,
    	[DogName] [nvarchar](255) NULL,
    	[GoodDog] [bit] NULL
    ) ON [PRIMARY];
    ';
    EXEC Homer.master.dbo.sp_executesql @tsql;

    1. 通常よりもきめ細かく報告– Microsoft Access

    2. PostgreSQLでデータベースのサイズを取得する2つの方法

    3. テーブルの列数を見つける

    4. PostgreSQLで1か月の日数を取得する