sql >> Database teknologi >  >> RDS >> Sqlserver

2 måder at oprette en database på en sammenkædet server ved hjælp af T-SQL

En måde at oprette en database på en linket server på er simpelthen at hoppe over til den server og oprette den lokalt.

Men du ville sikkert føle dig lidt snydt, hvis jeg inkluderede det som en af ​​de "2 måder" at oprette en database på en linket server på.

Selvom denne mulighed er fin, hvis du er i stand til og villig til at gøre det, viser denne artikel dig, hvordan du gør det eksternt ved hjælp af T-SQL uden at skulle hoppe over til den lokale server. Derudover vil du måske finde denne teknik hurtigere end at hoppe over til den anden server.

Begge de "2 måder" involverer EXECUTE sætning (som også kan forkortes til EXEC ). Vi kan bruge denne sætning til at udføre kode på den linkede server, og det inkluderer oprettelse af en database på den.

Forudsætning

Udførelse af lagrede procedurer på en forbundet server kræver, at du aktiverer RPC Out (hvis det ikke allerede er aktiveret).

Du kan kontrollere, om RPC Out er aktiveret ved at forespørge på sys.servers katalogvisning.

Følgende kode aktiverer RPC Out på en sammenkædet server kaldet Homer :

EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';

Når det er aktiveret, kan vi gå videre og oprette databasen.

Metode 1

Her er den første metode til at oprette en database på den linkede server.

EXEC ('CREATE DATABASE Pets') AT Homer;

I dette eksempel opretter jeg en database kaldet Pets på en forbundet server kaldet Homer .

EXECUTE /EXEC statement kan bruges til at sende pass-through-kommandoer til sammenkædede servere.

For at gøre dette skal du inkludere pass-through-kommando i parentes efter EXECUTE /EXEC søgeord, og følg det derefter op med AT LinkedServerName , hvor LinkedServerName er navnet på den sammenkædede server, som du vil oprette databasen på.

Derfor er alt, hvad vi skal gøre, at inkludere vores CREATE TABLE erklæring som argument for denne erklæring.

Bemærk, at det linkede servernavn er det navn, du gav det, da du oprettede den sammenkædede server. Det er ikke det faktiske servernavn på fjernserveren.

Metode 2

Den anden metode ligner den første, bortset fra i dette tilfælde sender vi vores kommando til sp_executesql systemlagret procedure på fjernserveren.

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

For at gøre dette skal vi bruge det firedelte navn, som inkluderer navnet på den linkede server. Hvis vi ikke gjorde dette, ville vi ende med at udføre sp_executesql på vores lokale server i stedet for fjernserveren.

Send erklæringen som en variabel

Du kan også videregive CREATE DATABASE sætning som en variabel til EXEC erklæring.

Sådan:

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

Selvom du prøver at skifte til databasen og oprette tabellerne, kan du løbe ind i problemer, selvom du tilføjer GO på de sædvanlige steder. Dette er sandsynligvis fordi GO søgeord er faktisk ikke en del af T-SQL, og det genkendes kun af visse værktøjer.

Derfor skal du muligvis køre et separat script for at oprette tabellerne.


  1. Returner oplysninger om operativsystemversion i SQL Server med sys.dm_os_host_info Dynamic Management View

  2. SQL Server INFORMATION_SCHEMA visninger | Se om der findes en tabel

  3. Kan ikke oprette forbindelse til heroku postgresql-database fra lokal node-app med efterfølger

  4. LEAST() Funktion i PostgreSQL