Wenn Sie eine Tabelle auf einem Verbindungsserver erstellen müssen, können Sie dies entweder direkt auf dem Remote-Server tun oder indem Sie ein Skript von Ihrem lokalen Server ausführen.
Hier sind zwei Möglichkeiten, T-SQL zu verwenden, um eine Tabelle auf einem Verbindungsserver zu erstellen.
Beide Methoden verwenden das EXECUTE
/EXEC
Erklärung. Aber jeder verwendet einen anderen Ansatz.
Voraussetzung
Das Ausführen gespeicherter Prozeduren auf einem Verbindungsserver erfordert, dass Sie RPC Out aktivieren (falls es nicht bereits aktiviert ist).
Sie können überprüfen, ob RPC Out aktiviert ist, indem Sie sys.servers
abfragen Katalogansicht.
Der folgende Code aktiviert RPC Out auf einem Verbindungsserver namens Homer
:
EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';
Wenn RPC Out aktiviert ist, können wir fortfahren und die Tabellen erstellen.
Methode 1
Unser erster Ansatz ist die Verwendung des AT
-Argument, um einen Verbindungsserver anzugeben, für den der Code ausgeführt werden soll. Diese Syntax ermöglicht es uns, Pass-Through-Befehle an verbundene Server zu senden.
Das geht so:
EXEC ('
USE [Pets];
CREATE TABLE [dbo].[Cats](
[CatId] [int] IDENTITY(1,1) NOT NULL,
[CatName] [varchar](60) NULL
) ON [PRIMARY];
') AT Homer;
Dadurch wird eine Tabelle namens Cats
erstellt in den Pets
Datenbank auf dem Verbindungsserver namens Homer
.
Dieser Code geht offensichtlich davon aus, dass es eine Datenbank namens Pets
gibt auf dem verlinkten Server. Wenn dies nicht der Fall ist, müssen Sie es zuerst erstellen.
Der Name des verknüpften Servers (Homer
in diesem Fall) ist eine vorhandene Verbindungsserverdefinition auf dem lokalen Server. Es ist nicht der Name des eigentlichen Remote-Servers.
Methode 2
Unser zweiter Ansatz besteht darin, sp_executesql
auszuführen gespeicherte Systemprozedur auf dem Remote-Server, während unsere T-SQL-Anweisung übergeben wird.
So:
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];
';
Obwohl die Syntax unterschiedlich ist, ist das Ergebnis dasselbe. Plus die CREATE TABLE
Syntax ändert sich nicht, unabhängig von der Methode, die für den Zugriff auf den Verbindungsserver verwendet wird.
Übergeben Sie die Anweisung als Variable
Sie können auch CREATE TABLE
übergeben -Anweisung als Variable an EXEC
Erklärung.
Dies kann nützlich sein, wenn Sie viele Tabellen und/oder andere Objekte erstellen müssen.
Hier ist ein Beispiel mit der ersten Syntax:
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;
Und hier ist das Äquivalent mit der zweiten Syntax:
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;