Si j'ai besoin de copier une procédure stockée (SP) d'un SQL Server à un autre, cliquez avec le bouton droit sur le SP dans SSMS et sélectionnez Script Stored Procedure sous> CREATE to> New Query Editor Window. Je modifie ensuite la connexion en cliquant avec le bouton droit sur cette fenêtre et en sélectionnant Connexion> Modifier la connexion ... puis en sélectionnant le nouveau serveur et F5 pour exécuter la création sur le nouveau serveur. Donc, ma question est "Quelle est la syntaxe T-SQL pour se connecter à un autre serveur SQL?" de sorte que je peux simplement coller cela dans le haut du script de création et F5 pour l'exécuter et il passerait au nouveau serveur et exécuterait le script de création. En tapant la question, je me suis rendu compte que si je vous donnais la base à ce que j'essaie de faire, vous pourriez trouver un moyen plus rapide et plus efficace d'accomplir cela.Quelle est la syntaxe T-SQL pour se connecter à un autre SQL Server?
Répondre
Aussi, assurez-vous que lorsque vous écrivez la requête impliquant le serveur lié, vous incluez entre parenthèses comme ceci:
SELECT * FROM [LinkedServer].[RemoteDatabase].[User].[Table]
J'ai trouvé qu'au moins sur 2000/2005 les [] crochets sont nécessaires, au moins autour du nom du serveur.
Essayez de créer un serveur lié (que vous pouvez faire avec sp_addlinkedserver), puis en utilisant OPENQUERY
Mise à jour: pour se connecter à un autre serveur SQL et exécuter des commandes SQL, vous devez utiliser sqlcmd Utility. Ceci est généralement fait dans un fichier batch. Vous pouvez combiner ceci avec xmp_cmdshell si vous voulez l'exécuter dans le studio de gestion. L'une des manières consiste à configurer un linked server. Vous pouvez ensuite ajouter le serveur lié et le nom de la base de données au nom de la table. (Select * from linkedserver.database.dbo.TableName)
USE master
GO
EXEC sp_addlinkedserver
'SEATTLESales',
N'SQL Server'
GO
C'est en fait la bonne réponse à la question spécifique. Ou plutôt, d'abord vous vous assurez que l'autre serveur est lié et donc interrogeable, alors vous pouvez sélectionner un autre serveur comme l'explique Codewerks. – mahalie
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 une réécriture de votre code pour l'encapsuler sous forme de chaîne, ce qui rend difficile le développement/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 être connecté au serveur directement à la 1ère place pour évaluer le DDL.
Si possible, consultez SSIS (SQL Server Integration Services). Je ne fais que mouiller mes pieds avec cette boîte à outils, mais je boucle déjà plus de 40 serveurs et je prépare à faire toutes sortes de havoc;)
Cela ne répond pas vraiment à sa question. –
Dans SQL Server Management Studio, activez le mode SQLCMD dans le 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, assurez-vous d'insérer GO
entre les connexions; otherwise your T-SQL won't execute on the server you're thinking it will.
Si vous vous connectez à plusieurs serveurs, vous devez ajouter un 'GO' avant de changer de serveur, sinon vos instructions SQL seront exécutées sur le mauvais serveur. http://www.sqlmatters.com/Articles/Changing%20the%20SQL%20Server%20connection%20within%20an%20SSMS%20Query%20Windows%20using%20SQLCMD%20Mode.aspx –
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 les serveurs de commutation, ou vos instructions SQL heurtera la mauvais serveur.
par exemple.
:CONNECT SERVER1
Select * from Table
GO
enter code here
:CONNECT SERVER1
Select * from Table
GO
(1) Mode SQLCMD, (2) ': CONNECT', (3)' USE', (4) 'SELECT'. –
sur mon disque C I d'abord créer un fichier txt pour créer une nouvelle table. Vous pouvez utiliser ce que vous voulez dans ce dans ce cas un fichier texte
le fichier texte est appelé « 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
je créer un autre fichier txt avec le nom "Bedrijf.bat" et l'extension chauve-souris. Il est contenu:
OSQL.EXE -U Username -P Password -S IPaddress -i C:Bedrijf.txt -o C:Bedrijf.out -d myDatabaseName
enregistrer et de l'explorateur double-cliquez pour exécuter
Les résultats seront enregistrés dans un fichier txt sur votre lecteur C avec le nom « Bedrijf.out »
il montre
1> 2> 3> START(A) create table
si tout va bien
C'est moi t
Wayne - si je comprends bien votre suggestion, alors cela exécute un SP résidant sur server1 sur server2 droit? Il ne crée pas le même SP sur server2 le fait-il? – Guy
Il exécute un sp sur server1 qui ouvre un lien vers server2. Vous pouvez alors passer par une requête ou un appel à quelque chose sur server2. – Wayne