Om du behöver skapa en tabell på en länkad server kan du göra detta antingen direkt på fjärrservern, eller så kan du göra det genom att köra ett skript från din lokala server.
Här är två sätt att använda T-SQL för att skapa en tabell på en länkad server.
Båda metoderna använder EXECUTE
/EXEC
påstående. Men alla använder olika tillvägagångssätt.
Förutsättning
För att köra lagrade procedurer på en länkad server måste du aktivera RPC Out (om det inte redan är aktiverat).
Du kan kontrollera om RPC Out är aktiverat genom att fråga sys.servers
katalogvy.
Följande kod aktiverar RPC Out på en länkad server som heter Homer
:
EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';
Med RPC Out aktiverat kan vi gå vidare och skapa tabellerna.
Metod 1
Vårt första tillvägagångssätt är att använda AT
argument för att ange en länkad server som koden ska köras för. Denna syntax tillåter oss att skicka genomkopplingskommandon till länkade servrar.
Det går så här:
EXEC ('
USE [Pets];
CREATE TABLE [dbo].[Cats](
[CatId] [int] IDENTITY(1,1) NOT NULL,
[CatName] [varchar](60) NULL
) ON [PRIMARY];
') AT Homer;
Detta skapar en tabell som heter Cats
i Pets
databas på den länkade servern som heter Homer
.
Den här koden förutsätter uppenbarligen att det finns en databas som heter Pets
på den länkade servern. Om det inte finns det måste du skapa det först.
Det länkade servernamnet (Homer
i detta fall) är en befintlig länkad serverdefinition på den lokala servern. Det är inte namnet på den faktiska fjärrservern.
Metod 2
Vår andra metod är att köra sp_executesql
systemlagrad procedur på fjärrservern, samtidigt som vi skickar in vår T-SQL-sats.
Så här:
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å även om syntaxen är annorlunda är resultatet detsamma. Plus, CREATE TABLE
syntaxen ändras inte, oavsett vilken metod som används för att komma åt den länkade servern.
Visa utdraget som en variabel
Du kan också skicka CREATE TABLE
sats som en variabel till EXEC
uttalande.
Detta kan vara användbart om du har många tabeller och/eller andra objekt att skapa.
Här är ett exempel med den första syntaxen:
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;
Och här är motsvarande med den andra syntaxen:
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;