sql >> Base de Datos >  >> RDS >> Sqlserver

2 formas de crear una tabla en un servidor vinculado usando T-SQL

Si necesita crear una tabla en un servidor vinculado, puede hacerlo directamente en el servidor remoto o puede hacerlo ejecutando un script desde su servidor local.

Aquí hay dos formas de usar T-SQL para crear una tabla en un servidor vinculado.

Ambos métodos usan EXECUTE /EXEC declaración. Pero cada uno usa un enfoque diferente.

Requisito previo

La ejecución de procedimientos almacenados en un servidor vinculado requiere que habilite RPC Out (si aún no está habilitado).

Puede verificar si RPC Out está habilitado consultando sys.servers vista de catálogo.

El siguiente código habilita RPC Out en un servidor vinculado llamado Homer :

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

Con RPC Out habilitado, podemos continuar y crear las tablas.

Método 1

Nuestro primer enfoque es usar el AT argumento para especificar un servidor vinculado para el cual ejecutar el código. Esta sintaxis nos permite enviar comandos de transferencia a servidores vinculados.

Va así:

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

Esto crea una tabla llamada Cats en las Pets base de datos en el servidor vinculado llamado Homer .

Este código obviamente asume que hay una base de datos llamada Pets en el servidor vinculado. Si no lo hay, deberá crearlo primero.

El nombre del servidor vinculado (Homer en este caso) es una definición de servidor vinculado existente en el servidor local. No es el nombre del servidor remoto real.

Método 2

Nuestro segundo enfoque es ejecutar sp_executesql procedimiento almacenado del sistema en el servidor remoto, al pasar nuestra instrucción T-SQL.

Así:

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

Entonces, aunque la sintaxis es diferente, el resultado es el mismo. Además, CREATE TABLE la sintaxis no cambia, independientemente del método utilizado para acceder al servidor vinculado.

Pasar la Declaración como una Variable

También puede pasar el CREATE TABLE declaración como una variable para el EXEC declaración.

Esto puede ser útil si tiene muchas tablas y/u otros objetos para crear.

Aquí hay un ejemplo usando la primera sintaxis:

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;

Y aquí está el equivalente usando la segunda sintaxis:

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;