Een manier om een database op een gekoppelde server te maken, is door simpelweg naar die server te springen en deze lokaal aan te maken.
Maar je zou je waarschijnlijk een beetje bedrogen voelen als ik dat zou opnemen als een van de "2 manieren" om een database te maken op een gekoppelde server.
Hoewel die optie prima is als je het kunt en wilt doen, laat dit artikel je zien hoe je het op afstand kunt doen met T-SQL, zonder dat je naar de lokale server hoeft te springen. Bovendien vind je deze techniek misschien sneller dan naar de andere server te springen.
Beide "2 manieren" hebben betrekking op de EXECUTE
statement (dat ook kan worden afgekort tot EXEC
). We kunnen dit statement gebruiken om code uit te voeren op de gekoppelde server, inclusief het maken van een database erop.
Vereiste
Voor het uitvoeren van opgeslagen procedures op een gekoppelde server moet u RPC Out inschakelen (als dit nog niet is ingeschakeld).
U kunt controleren of RPC Out is ingeschakeld door de sys.servers
. op te vragen catalogusweergave.
De volgende code activeert RPC Out op een gekoppelde server genaamd Homer
:
EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';
Zodra dat is ingeschakeld, kunnen we doorgaan en de database maken.
Methode 1
Dit is de eerste methode voor het maken van een database op de gekoppelde server.
EXEC ('CREATE DATABASE Pets') AT Homer;
In dit voorbeeld maak ik een database aan met de naam Pets
op een gekoppelde server genaamd Homer
.
De EXECUTE
/EXEC
statement kan worden gebruikt om pass-through-opdrachten naar gekoppelde servers te verzenden.
Om dit te doen, plaatst u het pass-through-commando tussen haakjes na de EXECUTE
/EXEC
zoekwoord en volg dat op met AT LinkedServerName
, waar LinkedServerName
is de naam van de gekoppelde server waarop u de database wilt maken.
Daarom hoeven we alleen maar onze CREATE TABLE
. op te nemen verklaring als argument voor deze verklaring.
Houd er rekening mee dat de naam van de gekoppelde server de naam is die u eraan hebt gegeven toen u de gekoppelde server maakte. Het is niet de daadwerkelijke servernaam van de externe server.
Methode 2
De tweede methode is vergelijkbaar met de eerste, behalve dat we in dit geval onze opdracht doorgeven aan de sp_executesql
systeem opgeslagen procedure op de externe server.
EXEC Homer.master.dbo.sp_executesql N'CREATE DATABASE World;';
Om dit te doen, moeten we de vierdelige naam gebruiken, die de naam van de gekoppelde server bevat. Als we dit niet zouden doen, zouden we uiteindelijk sp_executesql
uitvoeren op onze lokale server in plaats van de externe server.
Geef de stelling door als een variabele
U kunt ook de CREATE DATABASE
. doorgeven statement als een variabele naar de EXEC
verklaring.
Zoals dit:
DECLARE @tsql nvarchar(max);
SET @tsql = 'CREATE DATABASE Pets';
EXEC (@tsql) AT Homer;
Hoewel, als u vervolgens probeert over te schakelen naar de database en de tabellen te maken, u problemen kunt tegenkomen, zelfs als u GO
toevoegt op de gebruikelijke plaatsen. Dit komt waarschijnlijk omdat de GO
trefwoord maakt eigenlijk geen deel uit van T-SQL en wordt alleen herkend door bepaalde hulpprogramma's.
Daarom moet u mogelijk een apart script uitvoeren om de tabellen te maken.