risposta-alla-domanda-sullo-sviluppo-web-bd.com

Qual è la sintassi T-SQL per connettersi a un altro SQL Server?

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.

55
Guy

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.

48
Codewerks

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à.

82
mwg2002

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
28
Gulzar Nazim

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.

5
stephbu

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
4

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

http://www.sqlmatters.com/Articles/Changing%20the%20SQL%20Server%20connection%20within%20an%20SSMS%20Query%20Windows%20using%20SQLCMD%20Mode.aspx

3
Oscar Fraxedas

Prova a creare un server collegato (che puoi fare con sp_addlinkedserver ) e poi usare OPENQUERY

2
Wayne

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

2
frans eilering

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

0
MikeV

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();
0
Igor Krupitsky