Domanda

Se devo copiare una stored procedure (SP) da un SQL Server a un altro, faccio clic con il tasto destro del mouse su SP in SSMS e seleziono Script Stored Procedure come > CREA per > Nuova finestra dell'editor di query. Quindi cambio la connessione facendo clic con il tasto 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? " così che posso semplicemente incollarlo nella parte superiore dello script di creazione e F5 per eseguirlo e passerebbe al nuovo server ed eseguirà lo script di creazione.

Mentre scrivevo la domanda, mi sono reso conto che se ti avessi dato le basi di ciò che sto cercando di fare, potresti trovare un modo più veloce e migliore per farlo.

È stato utile?

Soluzione

Inoltre, quando si scrive la query che coinvolge il server collegato, assicurarsi di includere parentesi come questa:

SELECT * FROM [LinkedServer].[RemoteDatabase].[User].[Table]

Ho scoperto che almeno nel 2000/2005 sono necessarie le parentesi [], almeno attorno al nome del server.

Altri suggerimenti

In SQL Server Management Studio, attiva la modalità SQLCMD dal menu Query. Quindi nella parte superiore dello script, digita il comando di seguito

: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 stai pensando.

Aggiornamento: per connettersi a un altro server sql ed eseguire istruzioni sql, è necessario utilizzare Utilità sqlcmd . Questo in genere viene eseguito in un file batch. Puoi combinarlo con xmp_cmdshell se vuoi eseguirlo in Management Studio.


un modo è configurare un server collegato . quindi è possibile aggiungere il nome del server collegato e 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 dare accesso al DDL ma richiedono in qualche modo una riscrittura del codice per incapsularsi come stringa, rendendo difficile lo sviluppo / il debug.

In alternativa, è possibile ricorrere a un programma driver esterno per prelevare i file SQL da inviare al server remoto tramite OPEN QUERY. Tuttavia, nella maggior parte dei casi, potresti anche esserti connesso al server direttamente al 1 ° posto per valutare il DDL.

Ogni volta che stiamo provando a recuperare qualsiasi dato 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 passaggio:

--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 ti stai connettendo a più server devi aggiungere un 'GO' prima di cambiare server, altrimenti le tue istruzioni sql verranno eseguite sul server sbagliato.

per es.

: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

Prova a creare un server collegato (cosa che puoi fare con sp_addlinkedserver ) e quindi utilizzando OPENQUERY

sul mio disco C ho prima creato 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 si chiama " 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]

salvalo

quindi creo un altro file txt con il nome " Bedrijf.bat " e la prolunga. È 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 eseguire

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à eseguendo il loop su oltre 40 server e mi sto preparando a provocare ogni tipo di caos;)

Prova 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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top