sql >> Databasteknik >  >> RDS >> Sqlserver

2 sätt att skapa en databas på en länkad server med T-SQL

Ett sätt att skapa en databas på en länkad server är att helt enkelt hoppa över till den servern och skapa den lokalt.

Men du skulle förmodligen känna dig lite lurad om jag inkluderade det som ett av de "två sätten" att skapa en databas på en länkad server.

Även om det alternativet är bra om du kan och vill göra det, visar den här artikeln dig hur du gör det på distans med T-SQL, utan att behöva hoppa över till den lokala servern. Dessutom kanske du hittar den här tekniken snabbare än att hoppa över till den andra servern.

Båda "2 sätten" involverar EXECUTE sats (som också kan förkortas till EXEC ). Vi kan använda den här satsen för att exekvera kod på den länkade servern, och det inkluderar att skapa en databas på den.

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

När det är aktiverat kan vi gå vidare och skapa databasen.

Metod 1

Här är den första metoden för att skapa en databas på den länkade servern.

EXEC ('CREATE DATABASE Pets') AT Homer;

I det här exemplet skapar jag en databas som heter Pets på en länkad server som heter Homer .

EXECUTE /EXEC uttalande kan användas för att skicka pass-through-kommandon till länkade servrar.

För att göra detta, inkludera pass-through-kommandot inom parentes efter EXECUTE /EXEC sökord och följ sedan upp det med AT LinkedServerName , där LinkedServerName är namnet på den länkade servern som du vill skapa databasen på.

Allt vi behöver göra är därför att inkludera vår CREATE TABLE uttalande som ett argument till detta uttalande.

Observera att det länkade servernamnet är det namn du gav det när du skapade den länkade servern. Det är inte det faktiska servernamnet på fjärrservern.

Metod 2

Den andra metoden liknar den första, förutom i det här fallet skickar vi vårt kommando till sp_executesql systemlagrad procedur på fjärrservern.

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

För att göra detta måste vi använda det fyrdelade namnet, som inkluderar namnet på den länkade servern. Om vi ​​inte gjorde detta skulle vi sluta köra sp_executesql på vår lokala server istället för fjärrservern.

Visa utdraget som en variabel

Du kan också skicka CREATE DATABASE sats som en variabel till EXEC uttalande.

Så här:

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

Även om du försöker byta till databasen och skapa tabellerna kan du stöta på problem, även om du lägger till GO på vanliga platser. Det beror förmodligen på att GO nyckelordet är faktiskt inte en del av T-SQL, och det känns bara igen av vissa verktyg.

Därför kan du behöva köra ett separat skript för att skapa tabellerna.


  1. Att ha både en skapad och senast uppdaterad tidsstämpelskolumn i MySQL 4.0

  2. R12.2 Bestämning och konfiguration av upplaga

  3. Påskynda mysql dumpningar och importer

  4. MySQL-fel 1436:Överskriden trådstack, med enkel fråga