Sélection de données à partir de deux serveurs différents dans SQL Server



sql group by (11)

J'ai eu le même problème pour connecter un SQL_server 2008 à un SQL_server 2016 hébergé sur un serveur distant. D'autres réponses n'ont pas fonctionné pour moi directement. J'écris ma solution modifiée ici car je pense que cela peut être utile pour quelqu'un d'autre.

Une réponse étendue pour les connexions db IP distantes:

Étape 1: serveurs de liens

EXEC sp_addlinkedserver @server='SRV_NAME',
   @srvproduct=N'',
   @provider=N'SQLNCLI',   
   @datasrc=N'aaa.bbb.ccc.ddd';

EXEC sp_addlinkedsrvlogin 'SRV_NAME', 'false', NULL, 'your_remote_db_login_user', 'your_remote_db_login_password'

... où SRV_NAME est un nom inventé. Nous l'utiliserons pour faire référence au serveur distant à partir de nos requêtes. aaa.bbb.ccc.ddd est l'adresse IP du serveur distant hébergeant votre base de données SQLserver.

Étape 2: Exécutez vos requêtes Par exemple:

SELECT * FROM [SRV_NAME].your_remote_db_name.dbo.your_table

...et c'est tout!

Détails de la syntaxe: sp_addlinkedserver et sp_addlinkedsrvlogin

Comment puis-je sélectionner des données dans la même requête à partir de deux bases de données différentes sur deux serveurs différents dans SQL Server?


Answer #1

Vous pouvez le faire en utilisant Linked Server.

Les serveurs généralement liés sont configurés pour permettre au moteur de base de données d'exécuter une instruction Transact-SQL qui inclut des tables dans une autre instance de SQL Server ou un autre produit de base de données tel qu'Oracle. De nombreux types de sources de données OLE DB peuvent être configurés en tant que serveurs liés, notamment Microsoft Access et Excel.

Les serveurs liés offrent les avantages suivants:

  • La capacité d'accéder aux données provenant de l'extérieur de SQL Server.
  • La possibilité d'émettre des requêtes distribuées, des mises à jour, des commandes et des transactions sur des sources de données hétérogènes dans toute l'entreprise.
  • La possibilité d'adresser des sources de données diverses de manière similaire.

En savoir plus sur les serveurs liés .

Suivez ces étapes pour créer un serveur lié:

  1. Objets serveur -> Serveurs liés -> Nouveau serveur lié

  2. Fournir le nom du serveur distant.

  3. Sélectionnez le type de serveur distant (SQL Server ou autre).

  4. Sélectionnez Sécurité -> Soyez fait en utilisant ce contexte de sécurité et fournissez le login et le mot de passe du serveur distant.

  5. Cliquez OK et vous avez terminé !!

Here un tutoriel simple pour créer un serveur lié.

OU

Vous pouvez ajouter un serveur lié à l'aide de la requête.

Syntaxe:

sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] 
     [ , [ @provider= ] 'provider_name' ]
     [ , [ @datasrc= ] 'data_source' ] 
     [ , [ @location= ] 'location' ] 
     [ , [ @provstr= ] 'provider_string' ] 
     [ , [ @catalog= ] 'catalog' ] 

En savoir plus sur sp_addlinkedserver

Vous devez créer un serveur lié une seule fois . Après avoir créé un serveur lié, nous pouvons l'interroger comme suit:

select * from LinkedServerName.DatabaseName.OwnerName.TableName

Answer #2

essaye ça:

SELECT * FROM OPENROWSET('SQLNCLI', 'Server=YOUR SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a
UNION
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=ANOTHER SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a

Answer #3

Créé une définition de serveur lié dans un serveur à l'autre (vous avez besoin de SA pour faire ceci), alors juste les référence avec le nommage en 4 parties (voir BOL).


Answer #4

Oui, vous pouvez.

Je pense que vous demandez comment, alors je vais répondre à cela.

Ce que vous cherchez sont des serveurs liés. Vous pouvez y accéder dans SSMS à partir de l'emplacement suivant dans l'arborescence de l'Explorateur d'objets:

Server Objects-->Linked Servers

ou vous pouvez utiliser sp_addlinkedserver .

Vous devez seulement en créer un. Une fois que vous avez cela, vous pouvez appeler une table sur l'autre serveur comme ceci:

select
    *
from
    LocalTable,
    [OtherServerName].[OtherDB].[dbo].[OtherTable]

Notez que le propriétaire n'est pas toujours dbo , alors assurez-vous de le remplacer par le schéma que vous utilisez.


Answer #5

Serveur 2008:

En SSMS connecté à server1.DB1 et essayez:

SELECT  * FROM
[server2].[DB2].[dbo].[table1]

Comme d'autres l'ont noté, si cela ne fonctionne pas, c'est parce que le serveur n'est pas lié.

J'ai l'erreur:

Impossible de trouver le serveur DB2 dans sys.servers. Vérifiez que le nom du serveur correct a été spécifié. Si nécessaire, exécutez la procédure stockée sp_addlinkedserver pour ajouter le serveur à sys.servers.

Pour ajouter le serveur:

reference: Pour ajouter un serveur à l'aide de sp_addlinkedserver Lien: [1]: Pour ajouter un serveur à l'aide de sp_addlinkedserver

Pour voir ce qui est dans votre sys.servers il suffit de l'interroger:

SELECT * FROM [sys].[servers]

Answer #6

L'interrogation de 2 bases de données différentes est une requête distribuée. Voici une liste de quelques techniques plus les avantages et les inconvénients:

  1. Serveurs liés: fournissent un accès à une plus grande variété de sources de données que la réplication SQL Server
  2. Serveurs liés: connectez - vous aux sources de données non prises en charge par la réplication ou nécessitant un accès ad hoc
  3. Serveurs liés: meilleurs que OPENDATASOURCE ou OPENROWSET
  4. Fonctions OPENDATASOURCE et OPENROWSET : pratiques pour récupérer des données à partir de sources de données sur une base ad hoc. OPENROWSET a aussi des installations BULK qui peuvent / peuvent ne pas nécessiter un fichier de format qui pourrait être fiddley
  5. OPENQUERY : ne prend pas en charge les variables
  6. Toutes sont des solutions T-SQL. Relativement facile à mettre en place et à mettre en place
  7. Tous dépendent de la connexion entre la source et la destionation, ce qui peut affecter les performances et l'évolutivité

Answer #7
SELECT
        *
FROM
        [SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]

Vous pouvez également regarder à l'aide de serveurs liés. Les serveurs liés peuvent également être d'autres types de sources de données telles que les plates-formes DB2. C'est une méthode pour essayer d'accéder à DB2 à partir d'un appel SQL Server TSQL ou Sproc ...


Answer #8
sp_addlinkedserver('servername')

donc ça devrait aller comme ça -

select * from table1
unionall
select * from [server1].[database].[dbo].[table1]

Answer #9
 select * 
 from [ServerName(IP)].[DatabaseName].[dbo].[TableName]

Answer #10

Objets serveur ---> serveur lié ---> nouveau serveur lié

Dans un serveur lié, écrivez le nom du serveur ou l'adresse IP de l'autre serveur et choisissez SQL Server Dans Sécurité sélectionnez (faites en utilisant ce contexte de sécurité) Écrivez le login et le mot de passe pour l'autre serveur

Maintenant connecté, utilisez

Select * from [server name or ip addresses ].databasename.dbo.tblname




sql-server