Hvis du har brug for at oprette en tabel på en sammenkædet server, kan du gøre dette enten direkte på fjernserveren, eller du kan gøre det ved at køre et script fra din lokale server.
Her er to måder at bruge T-SQL til at oprette en tabel på en forbundet server.
Begge metoder bruger EXECUTE
/EXEC
udmelding. Men hver bruger en anden tilgang.
Forudsætning
Udførelse af lagrede procedurer på en forbundet server kræver, at du aktiverer RPC Out (hvis det ikke allerede er aktiveret).
Du kan kontrollere, om RPC Out er aktiveret ved at forespørge på sys.servers
katalogvisning.
Følgende kode aktiverer RPC Out på en sammenkædet server kaldet Homer
:
EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';
Med RPC Out aktiveret, kan vi gå videre og oprette tabellerne.
Metode 1
Vores første tilgang er at bruge AT
argument for at angive en sammenkædet server, som koden skal køres for. Denne syntaks giver os mulighed for at sende pass-through-kommandoer til linkede servere.
Det går sådan her:
EXEC ('
USE [Pets];
CREATE TABLE [dbo].[Cats](
[CatId] [int] IDENTITY(1,1) NOT NULL,
[CatName] [varchar](60) NULL
) ON [PRIMARY];
') AT Homer;
Dette opretter en tabel kaldet Cats
i Pets
database på den sammenkædede server kaldet Homer
.
Denne kode forudsætter naturligvis, at der er en database kaldet Pets
på den tilknyttede server. Hvis der ikke er det, skal du oprette det først.
Det linkede servernavn (Homer
i dette tilfælde) er en eksisterende linket serverdefinition på den lokale server. Det er ikke navnet på den faktiske fjernserver.
Metode 2
Vores anden tilgang er at udføre sp_executesql
systemlagret procedure på fjernserveren, mens vi sender vores T-SQL-sætning.
Sådan:
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];
';
Så selvom syntaksen er anderledes, er resultatet det samme. Plus, CREATE TABLE
syntaks ændres ikke, uanset hvilken metode der bruges til at få adgang til den linkede server.
Send erklæringen som en variabel
Du kan også videregive CREATE TABLE
sætning som en variabel til EXEC
erklæring.
Dette kan være nyttigt, hvis du har mange tabeller og/eller andre objekter at oprette.
Her er et eksempel, der bruger den første syntaks:
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;
Og her er det tilsvarende ved hjælp af den anden syntaks:
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;