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

2 modi per creare un database su un server collegato utilizzando T-SQL

Un modo per creare un database su un server collegato è semplicemente passare a quel server e crearlo localmente.

Ma probabilmente ti sentiresti un po' tradito se lo includessi come uno dei "2 modi" per creare un database su un server collegato.

Inoltre, mentre questa opzione va bene se sei in grado e disposto a farlo, questo articolo ti mostra come farlo in remoto usando T-SQL, senza dover passare al server locale. Inoltre, potresti trovare questa tecnica più veloce che passare all'altro server.

Entrambi i "2 modi" coinvolgono il EXECUTE istruzione (che può anche essere abbreviata in EXEC ). Possiamo usare questa istruzione per eseguire codice sul server collegato e ciò include la creazione di un database su di esso.

Prerequisito

L'esecuzione di stored procedure su un server collegato richiede l'abilitazione di RPC Out (se non è già abilitato).

Puoi verificare se RPC Out è abilitato eseguendo una query su sys.servers vista catalogo.

Il codice seguente abilita RPC Out su un server collegato chiamato Homer :

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

Una volta abilitato, possiamo procedere e creare il database.

Metodo 1

Ecco il primo metodo per creare un database sul server collegato.

EXEC ('CREATE DATABASE Pets') AT Homer;

In questo esempio creo un database chiamato Pets su un server collegato chiamato Homer .

Il EXECUTE /EXEC L'istruzione può essere utilizzata per inviare comandi pass-through ai server collegati.

Per fare ciò, includi il comando pass-through tra parentesi dopo EXECUTE /EXEC parola chiave, quindi prosegui con AT LinkedServerName , dove LinkedServerName è il nome del server collegato su cui si desidera creare il database.

Pertanto, tutto ciò che dobbiamo fare è includere il nostro CREATE TABLE dichiarazione come argomento a questa affermazione.

Nota che il nome del server collegato è il nome che gli hai assegnato quando hai creato il server collegato. Non è il nome effettivo del server remoto.

Metodo 2

Il secondo metodo è simile al primo, tranne che in questo caso passiamo il nostro comando a sp_executesql stored procedure di sistema sul server remoto.

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

Per fare ciò, dobbiamo utilizzare il nome in quattro parti, che include il nome del server collegato. Se non lo facessimo, finiremmo per eseguire sp_executesql sul nostro server locale anziché sul server remoto.

Passa la dichiarazione come variabile

Puoi anche passare il CREATE DATABASE istruzione come variabile per EXEC dichiarazione.

In questo modo:

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

Tuttavia, se provi a passare al database e a creare le tabelle, potresti riscontrare problemi, anche se aggiungi GO nei soliti posti. Ciò è probabilmente dovuto al GO La parola chiave non fa effettivamente parte di T-SQL ed è riconosciuta solo da alcune utilità.

Pertanto, potrebbe essere necessario eseguire uno script separato per creare le tabelle.