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.