Se connecter au server distant dans T-SQL (SQL Server 2008)

Quelqu'un at-il un exemple de procédure stockée qui établit une connection avec un server distant?

J'ai cherché sur le web et j'ai découvert que cela pourrait être fait en utilisant sp_addlinkedserver et sp_addlinkedsrvlogin mais je n'ai pas trouvé un bon exemple et je ne comprends pas très bien la documentation.

METTRE À JOUR:

Aucune des deux premières réponses ne m'aide, le plus proche que je peux get est d'utiliser ceci:

 EXEC sp_addlinkedserver @server = 'SiminnSrv', @provider = 'SQLNCLI', @catalog = 'devel', @srvproduct = '', @provstr = 'DRIVER={SQL Server};SERVER=my.serveradr.com;UID=my_user_name;PWD=my_pass_word;' 

Cela me permet effectivement de me connecter, mais quand je interroge une table, je reçois ce message:

La connection a échoué pour l'user '(null)'. Raison: non associé à une connection SQL Server de confiance.

Essentiellement, vous créez un server lié à l'autre server, puis fournissez les informations d'identification de connection à utiliser pour les appels SQL à ce server lié. Par exemple, ceci se connectera à "MyOtherServer" en utilisant un DomainAccount pour ce server avec le nom d'user et le mot de passe "DomainUserName", "DomainPassword"

 EXEC sp_addlinkedserver 'MyOtherServer', N'SQL Server' EXEC sp_addlinkedsrvlogin 'MyOtherServer', 'false', 'OtherServerDomain\DomainUser', 'DomainUserName', 'DomainPassword' 

Plus d'infos ici et ici

J'ai réussi à me connecter à MSSQL Server 2008 via un server lié en utilisant le "SQL Server Native Client 10" ( SQLNCLI10 ), mais j'ai dû utiliser sp_addlinkedsrvlogin au lieu de @provstr pour fournir les détails de connection. Ceci est basé sur l'exemple de cet article :

 EXEC master.dbo.sp_addlinkedserver @server = 'MyServerConnection', @srvproduct = '', @datasrc = 'SERVERNAME\INSTANCENAME', @provider = 'SQLNCLI10', @provstr = '' EXEC sp_addlinkedsrvlogin @rmtsrvname = 'MyServerConnection', @useself = 'false', --@locallogin = 'someLocalUser' -- Use to ressortingct the connection to specific login @rmtuser = 'remoteUser', @rmtpassword = 'secret' 

Interrogation de ce server lié:

 SELECT * FROM [MyServerConnection].[SomeDatabase].[dbo].[TableName] 

SI vous voulez pouvoir interroger un autre server, vous devez créer un server lié.

Cette page explique en détail comment fonctionne le sp. http://doc.ddart.net/mssql/sql70/sp_adda_17.htm

Si vous voulez créer un lien vers un server sql antoher, exécutez simplement ceci:

 sp_addlinkedserver @server='ServerName', @srvproduct='SQL Server' 

@server est le nom du server que vous voulez append. @srcproduct est le type de server. Il pourrait y avoir d'autres choses que vous devrez faire pour relier 2008 à 2005, mais 2008 devrait fonctionner comme ceci.

Je suis peut-être en retard à la fête, mais j'ai trouvé les liens suivants qui ont fonctionné pour moi:

Pour effectuer le lien initial, j'ai utilisé

 EXEC sp_addlinkedserver @server='serverLinkPseudonym',@srvproduct='',@provider='SQLOLEDB', @datasrc='192.168.1.1'; 

Ensuite, alors que je me connectais avec l'authentification Windows, j'ai ajouté l'user Windows (cela a corrigé mon erreur "Non associé à un server SQL approuvé")

 EXEC sp_addlinkedsrvlogin 'serverLinkPseudonym', 'false', 'MACHINENAME\windowsLogin', 'lnkSrvLogin', 'lnkSrvPswd'; 

J'ai également constaté que si j'allais exécuter des tâches SQL Server Agent qui appelaient le LinkedServer, je devais append ce qui suit:

 EXEC sp_addlinkedsrvlogin 'serverLinkPseudonym', 'false', 'NT AUTHORITY\SYSTEM', 'lnkSrvLogin', 'lnkSrvPswd'; 

Par souci de clarté: "192.168.1.1" est l'adresse IP du server auquel il doit être lié. "lnkSrvLogin" est un login sur le server auquel il est lié, qui a access aux bases de données auxquelles vous devez accéder. "lnkSrvPswd" est le mot de passe de ce count.

Si vous vous connectez au server lié, en utilisant un count du server existant, vous utilisez simplement ce nom de count dans la command sp_addlinkedsrvlogin. par exemple:

 EXEC sp_addlinkedsrvlogin 'serverLinkPseudonym', 'false', 'thisServerLogin', 'lnkSrvLogin', 'lnkSrvPswd'; 

Ensuite, testez-le:

 SELECT * FROM [serverLinkPseudonym].[DBName].[dbo].[TableName]