Se è necessario copiare una stored procedure (SP) da un server SQL a un altro, fare clic con il pulsante destro del mouse su SP in SSMS e selezionare Script Stored Procedure come> CREATE a> Nuova finestra dell'editor di query. Quindi cambio la connessione facendo clic destro su quella finestra e selezionando Connessione> Cambia connessione ... e quindi selezionando il nuovo server e F5 per eseguire la creazione sul nuovo server.
Quindi la mia domanda è "Qual è la sintassi T-SQL per connettersi a un altro SQL Server?" cosicché posso incollarlo nella parte superiore dello script di creazione e F5 per eseguirlo e passare al nuovo server ed eseguire lo script di creazione.
Mentre scrivevo la domanda, mi sono reso conto che se ti davo le spalle a quello che sto cercando di fare, potresti ottenere da me un modo più veloce e migliore per farlo.
Inoltre, assicurati che quando scrivi la query riguardante il server collegato, includi parentesi come questa:
SELECT * FROM [LinkedServer].[RemoteDatabase].[User].[Table]
Ho trovato che almeno nel 2000/2005 le parentesi [] sono necessarie, almeno attorno al nome del server.
In SQL Server Management Studio, attiva la modalità SQLCMD dal menu Query . Quindi, nella parte superiore dello script, digita il comando seguente
:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]
Se ci si connette a più server, assicurarsi di inserire GO
tra le connessioni; altrimenti il tuo T-SQL non verrà eseguito sul server che pensi che funzionerà.
Aggiornamento: per connettersi a un altro server SQL ed eseguire istruzioni SQL, è necessario utilizzare sqlcmd Utility . Questo in genere viene eseguito in un file batch . È possibile combinarlo con xmp_cmdshell se si desidera eseguirlo all'interno dello studio di gestione.
un modo è configurare un server collegato . quindi è possibile aggiungere il server collegato e il nome del database al nome della tabella. (selezionare * da linkedserver.database.dbo.TableName)
USE master
GO
EXEC sp_addlinkedserver
'SEATTLESales',
N'SQL Server'
GO
Se dovessi parafrasare la domanda - è possibile scegliere il contesto del server per l'esecuzione della query nel DDL - la risposta è no. Solo il contesto del database può essere scelto a livello di programmazione con USE. (avendo già preselezionato il contesto del server esternamente)
Il server collegato e OPEN QUERY possono consentire l'accesso al DDL, ma richiedono in qualche modo una riscrittura del codice da incapsulare come stringa, rendendo difficile lo sviluppo/il debug.
In alternativa, è possibile ricorrere a un programma driver esterno per raccogliere i file SQL da inviare al server remoto tramite OPEN QUERY. Tuttavia, nella maggior parte dei casi potresti anche essere connesso al server direttamente al 1 ° posto per valutare il DDL.
Ogni volta che stiamo cercando di recuperare dati da un altro server abbiamo bisogno di due passaggi.
Primo passo:
-- Server one scalar variable
DECLARE @SERVER VARCHAR(MAX)
--Oracle is the server to which we want to connect
EXEC SP_ADDLINKEDSERVER @SERVER='Oracle'
Secondo passo:
--DBO is the owner name to know table owner name execute (SP_HELP TABLENAME)
SELECT * INTO DESTINATION_TABLE_NAME
FROM Oracle.SOURCE_DATABASENAME.DBO.SOURCE_TABLE
Se ci si connette a più server, è necessario aggiungere un "GO" prima di cambiare server, altrimenti le istruzioni SQL verranno eseguite sul server sbagliato.
per esempio.
:CONNECT SERVER1
Select * from Table
GO
enter code here
:CONNECT SERVER1
Select * from Table
GO
Prova a creare un server collegato (che puoi fare con sp_addlinkedserver ) e poi usare OPENQUERY
sul mio disco C, prima creo un file txt per creare una nuova tabella. Puoi usare quello che vuoi in questo file di testo
in questo caso il file di testo è chiamato "Bedrijf.txt"
il contenuto:
Print 'START(A) create table'
GO 1
If not EXISTS
(
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Bedrijf'
)
BEGIN
CREATE TABLE [dbo].[Bedrijf] (
[IDBedrijf] [varchar] (38) NOT NULL ,
[logo] [varbinary] (max) NULL ,
[VolledigeHandelsnaam] [varchar] (100) NULL
) ON [PRIMARY]
salvarla
poi creo un altro file txt con il nome "Bedrijf.bat" e l'estensione bat . È contenuto:
OSQL.EXE -U Username -P Password -S IPaddress -i C:Bedrijf.txt -o C:Bedrijf.out -d myDatabaseName
salvalo e da Explorer fai doppio clic per eseguirlo
I risultati verranno salvati in un file txt sull'unità C con il nome "Bedrijf.out"
mostra
1> 2> 3> START(A) create table
se tutto va bene
Questo è tutto
Se possibile, controlla SSIS (SQL Server Integration Services). Mi sto solo bagnando i piedi con questo toolkit, ma sto già girando oltre 40 server e mi sto preparando a provocare tutti i tipi di distruzione;)
Prova il tipo di PowerShell come:
$cn = new-object system.data.SqlClient.SQLConnection("Data Source=server1;Initial Catalog=db1;User ID=user1;Password=password1");
$cmd = new-object system.data.sqlclient.sqlcommand("exec Proc1", $cn);
$cn.Open();
$cmd.CommandTimeout = 0
$cmd.ExecuteNonQuery()
$cn.Close();