Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

2 maneiras de criar uma tabela em um servidor vinculado usando T-SQL


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;