Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

2 Möglichkeiten zum Erstellen einer Datenbank auf einem verknüpften Server mit T-SQL

Eine Möglichkeit, eine Datenbank auf einem Verbindungsserver zu erstellen, besteht darin, einfach zu diesem Server zu springen und sie lokal zu erstellen.

Aber Sie würden sich wahrscheinlich ein bisschen betrogen fühlen, wenn ich das als eine der „2 Möglichkeiten“ zum Erstellen einer Datenbank auf einem verknüpften Server aufführen würde.

Auch wenn diese Option in Ordnung ist, wenn Sie dazu in der Lage und bereit sind, zeigt Ihnen dieser Artikel, wie Sie dies remote mit T-SQL tun können, ohne auf den lokalen Server springen zu müssen. Außerdem finden Sie diese Technik vielleicht schneller, als auf den anderen Server zu springen.

Beide „2 Wege“ beinhalten das EXECUTE -Anweisung (die auch zu EXEC abgekürzt werden kann ). Wir können diese Anweisung verwenden, um Code auf dem Verbindungsserver auszuführen, und dazu gehört auch das Erstellen einer Datenbank darauf.

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';

Sobald dies aktiviert ist, können wir fortfahren und die Datenbank erstellen.

Methode 1

Hier ist die erste Methode zum Erstellen einer Datenbank auf dem Verbindungsserver.

EXEC ('CREATE DATABASE Pets') AT Homer;

In diesem Beispiel erstelle ich eine Datenbank namens Pets auf einem Verbindungsserver namens Homer .

Die EXECUTE /EXEC -Anweisung kann verwendet werden, um Pass-Through-Befehle an Verbindungsserver zu senden.

Fügen Sie dazu den Pass-Through-Befehl in Klammern nach EXECUTE ein /EXEC Stichwort, dann folgen Sie diesem mit AT LinkedServerName , wobei LinkedServerName ist der Name des Verbindungsservers, auf dem Sie die Datenbank erstellen möchten.

Daher müssen wir lediglich unsere CREATE TABLE einfügen -Anweisung als Argument für diese Anweisung.

Beachten Sie, dass der Name des Verbindungsservers der Name ist, den Sie ihm beim Erstellen des Verbindungsservers gegeben haben. Es ist nicht der tatsächliche Servername des Remote-Servers.

Methode 2

Die zweite Methode ähnelt der ersten, außer dass wir in diesem Fall unseren Befehl an sp_executesql übergeben gespeicherte Systemprozedur auf dem Remote-Server.

EXEC Homer.master.dbo.sp_executesql N'CREATE DATABASE World;';

Dazu müssen wir den vierteiligen Namen verwenden, der den Namen des verknüpften Servers enthält. Wenn wir dies nicht tun würden, würden wir am Ende sp_executesql ausführen auf unserem lokalen Server statt auf dem Remote-Server.

Übergeben Sie die Anweisung als Variable

Sie können auch CREATE DATABASE übergeben -Anweisung als Variable an EXEC Aussage.

So:

DECLARE @tsql nvarchar(max);
SET @tsql = 'CREATE DATABASE Pets';
EXEC (@tsql) AT Homer;

Wenn Sie dann versuchen, zur Datenbank zu wechseln und die Tabellen zu erstellen, können Probleme auftreten, selbst wenn Sie GO hinzufügen an den üblichen Stellen. Das liegt wahrscheinlich daran, dass GO Das Schlüsselwort ist nicht wirklich Teil von T-SQL und wird nur von bestimmten Dienstprogrammen erkannt.

Daher müssen Sie möglicherweise ein separates Skript ausführen, um die Tabellen zu erstellen.