Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

2 modi per creare una tabella su un server collegato utilizzando T-SQL

Se devi creare una tabella su un server collegato, puoi farlo direttamente sul server remoto oppure puoi farlo eseguendo uno script dal tuo server locale.

Ecco due modi per utilizzare T-SQL per creare una tabella su un server collegato.

Entrambi i metodi utilizzano EXECUTE /EXEC dichiarazione. Ma ognuno usa un approccio diverso.

Prerequisito

L'esecuzione di stored procedure su un server collegato richiede l'abilitazione di RPC Out (se non è già abilitato).

Puoi verificare se RPC Out è abilitato eseguendo una query su sys.servers vista catalogo.

Il codice seguente abilita RPC Out su un server collegato chiamato Homer :

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

Con RPC Out abilitato, possiamo andare avanti e creare le tabelle.

Metodo 1

Il nostro primo approccio consiste nell'usare AT argomento per specificare un server collegato per cui eseguire il codice. Questa sintassi ci consente di inviare comandi pass-through ai server collegati.

Funziona così:

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

Questo crea una tabella chiamata Cats nel Pets database sul server collegato chiamato Homer .

Questo codice ovviamente presuppone che ci sia un database chiamato Pets sul server collegato. In caso contrario, dovrai prima crearlo.

Il nome del server collegato (Homer in questo caso) è una definizione di server collegato esistente nel server locale. Non è il nome del vero server remoto.

Metodo 2

Il nostro secondo approccio è eseguire sp_executesql stored procedure di sistema sul server remoto, durante il passaggio della nostra istruzione T-SQL.

In questo modo:

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];
    ';

Quindi, anche se la sintassi è diversa, il risultato è lo stesso. Inoltre, il CREATE TABLE la sintassi non cambia, indipendentemente dal metodo utilizzato per accedere al server collegato.

Passa la dichiarazione come variabile

Puoi anche passare il CREATE TABLE istruzione come variabile per EXEC dichiarazione.

Questo può essere utile se hai molte tabelle e/o altri oggetti da creare.

Ecco un esempio usando la prima sintassi:

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;

Ed ecco l'equivalente usando la seconda sintassi:

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;