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;