Se você precisar criar uma tabela em um servidor vinculado, poderá fazer isso diretamente no servidor remoto ou executar um script do servidor local.
Aqui estão duas maneiras de usar o T-SQL para criar uma tabela em um servidor vinculado.
Ambos os métodos usam o
EXECUTE
/EXEC
demonstração. Mas cada um usa uma abordagem diferente. Pré-requisito
A execução de procedimentos armazenados em um servidor vinculado exige que você habilite RPC Out (se ainda não estiver habilitado).
Você pode verificar se o RPC Out está habilitado consultando o
sys.servers
visualização do catálogo. O código a seguir habilita o RPC Out em um servidor vinculado chamado
Homer
:EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';
Com o RPC Out habilitado, podemos prosseguir e criar as tabelas.
Método 1
Nossa primeira abordagem é usar o
AT
argumento para especificar um servidor vinculado para o qual executar o código. Essa sintaxe nos permite enviar comandos de passagem para servidores vinculados. Fica assim:
EXEC ('
USE [Pets];
CREATE TABLE [dbo].[Cats](
[CatId] [int] IDENTITY(1,1) NOT NULL,
[CatName] [varchar](60) NULL
) ON [PRIMARY];
') AT Homer;
Isso cria uma tabela chamada
Cats
em Pets
banco de dados no servidor vinculado chamado Homer
. Este código obviamente assume que existe um banco de dados chamado
Pets
no servidor vinculado. Se não houver, você precisará criá-lo primeiro. O nome do servidor vinculado (
Homer
neste caso) é uma definição de servidor vinculado existente no servidor local. Não é o nome do servidor remoto real. Método 2
Nossa segunda abordagem é executar o
sp_executesql
procedimento armazenado do sistema no servidor remoto, enquanto passa nossa instrução T-SQL. Assim:
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];
';
Portanto, embora a sintaxe seja diferente, o resultado é o mesmo. Além disso, o
CREATE TABLE
sintaxe não muda, independentemente do método usado para acessar o servidor vinculado. Passe o extrato como uma variável
Você também pode passar o
CREATE TABLE
declaração como uma variável para o EXEC
demonstração. Isso pode ser útil se você tiver muitas tabelas e/ou outros objetos para criar.
Aqui está um exemplo usando a primeira sintaxe:
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;
E aqui está o equivalente usando a segunda sintaxe:
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;