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;