Question

Si je dois copier une procédure stockée (SP) d'un serveur SQL vers un autre, je clique avec le bouton droit de la souris sur le SP dans SSMS et sélectionnez Procédure stockée de script sous > CRÉER pour > Nouvelle fenêtre de l'éditeur de requêtes. Je modifie ensuite la connexion en cliquant avec le bouton droit de la souris sur cette fenêtre et en sélectionnant Connexion > Change Connection ... puis sélectionnez le nouveau serveur et F5 pour exécuter la création sur le nouveau serveur.

Ma question est donc "Quelle est la syntaxe T-SQL pour se connecter à un autre serveur SQL?" afin que je puisse simplement le coller en haut du script de création et que F5 l’exécute, il basculera vers le nouveau serveur et exécutera le script de création.

En tapant la question, je me suis rendu compte que si je vous expliquais ce que j'essayais de faire, vous pourriez trouver un moyen plus rapide et meilleur de ma part pour y parvenir.

Était-ce utile?

La solution

Assurez-vous également que, lorsque vous écrivez la requête impliquant le serveur lié, vous incluez des crochets tels que:

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

J'ai constaté qu'au moins pour 2000/2005, les crochets [] sont nécessaires, au moins autour du nom du serveur.

Autres conseils

Dans SQL Server Management Studio, activez le mode SQLCMD à partir du menu Requête. Puis, en haut de votre script, tapez la commande ci-dessous

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]

Si vous vous connectez à plusieurs serveurs, veillez à insérer GO entre les connexions. sinon, votre T-SQL ne sera pas exécuté sur le serveur qui vous intéresse.

Mise à jour: pour vous connecter à un autre serveur SQL et exécuter des instructions SQL, vous devez utiliser Utilitaire sqlcmd . Cela se fait généralement dans un fichier de commandes. Vous pouvez combiner cela avec xmp_cmdshell si vous le souhaitez. exécutez-le dans le studio de gestion.

Une solution consiste à configurer un serveur lié . vous pouvez ensuite ajouter le serveur lié et le nom de la base de données au nom de la table. (sélectionnez * à partir du serveur lié.database.dbo.NomTable)

USE master
GO
EXEC sp_addlinkedserver 
    'SEATTLESales',
    N'SQL Server'
GO

Si je devais paraphraser la question - est-il possible de choisir le contexte du serveur pour l'exécution de la requête dans le DDL - la réponse est non. Seul le contexte de base de données peut être choisi par programme avec USE. (ayant déjà présélectionné le contexte du serveur en externe)

Le serveur lié et OPEN QUERY peuvent donner accès au DDL, mais nécessitent en quelque sorte une réécriture de votre code à encapsuler sous forme de chaîne, ce qui rend difficile le développement / le débogage.

Vous pouvez également recourir à un programme de pilote externe pour récupérer les fichiers SQL à envoyer au serveur distant via OPEN QUERY. Cependant, dans la plupart des cas, vous pourriez aussi bien vous être connecté au serveur directement à la 1ère place pour évaluer le DDL.

Chaque fois que nous essayons de récupérer des données d'un autre serveur, nous avons besoin de deux étapes.

Première étape:

-- Server one scalar variable
DECLARE @SERVER VARCHAR(MAX)
--Oracle is the server to which we want to connect
EXEC SP_ADDLINKEDSERVER @SERVER='ORACLE'

Deuxième étape:

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

Si vous vous connectez à plusieurs serveurs, vous devez ajouter un "GO" avant de changer de serveur, sinon vos instructions SQL s'exécutent sur le mauvais serveur.

par exemple

: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%20anfile%20Query%20Windows%20usQL%20SQLCMD%20Mode.aspx

Essayez de créer un serveur lié ( sp_addlinkedserver ) puis à l'aide de OPENQUERY

sur mon lecteur C, je crée d’abord un fichier txt pour créer une nouvelle table. Vous pouvez utiliser ce que vous voulez dans ce fichier texte

Dans ce cas, le fichier texte s'appelle "Bedrijf.txt"

.

le contenu:

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]

enregistrez-le

alors je crée un autre fichier txt avec le nom "Bedrijf.bat " et la chauve-souris d'extension. C'est contenu:

OSQL.EXE  -U Username -P Password -S IPaddress -i C:Bedrijf.txt -o C:Bedrijf.out -d myDatabaseName

sauvegardez-le et double-cliquez sur l'explorateur pour l'exécuter

Les résultats seront enregistrés dans un fichier txt sur votre lecteur C sous le nom "Bedrijf.out"

.

cela montre

1> 2> 3> START(A) create table

si tout se passe bien

c'est tout

Si possible, vérifiez SSIS (SQL Server Integration Services). Je commence tout juste à me familiariser avec cette boîte à outils, mais je suis déjà en train de boucler plus de 40 serveurs et je suis sur le point de faire toutes sortes de ravages;)

Essayez le type PowerShell tel que:

$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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top