Qu'est-ce qu'une «requête hétérogène»?


14

J'ai reçu le message d'erreur suivant concernant une requête SQL que j'exécute dans un programme. SQL Server 2005 T-SQL.

Les requêtes hétérogènes nécessitent que les options ANSI_NULLSet ANSI_WARNINGSsoient définies pour la connexion. Cela garantit une sémantique de requête cohérente. Activez ces options, puis relancez votre requête. (gravité 16)

Le réparer est facile, défini ANSI_NULLSet ANSI_WARNINGS ON, mais je voulais savoir ce qu'est une requête hétérogène. Une recherche Google fait apparaître des dizaines de résultats me disant de définir ANSI_NULLSet ANSI_WARNINGS, rien expliquant ce que le terme signifie. La requête est:

UPDATE SRV.DB.DBO.TABLE SET Column=
            (SELECT Column 
            FROM SRV1.DB.DBO.TABLE)

Je pense que cela est dû à la connexion à plusieurs moteurs de base de données dans une seule requête, car je n'ai jamais eu cette erreur autrement.
"Hétérogène" fait-il simplement référence à l'interrogation de deux moteurs de base de données différents dans ce contexte?

Réponses:


8

"Hétérogène" fait-il simplement référence à l'interrogation de deux moteurs de base de données différents dans ce contexte?

Fondamentalement, oui. Une requête "hétérogène" est exécutée sur un "serveur lié hétérogène". Toutes les requêtes adressées à ce serveur lié seront hétérogènes.

Et "hétérogène" est un sous-ensemble de requêtes distribuées

  • Données distribuées stockées dans plusieurs instances de SQL Server.
  • Données hétérogènes stockées dans diverses sources de données relationnelles et non relationnelles accessibles à l'aide d'un fournisseur OLE DB.

Mais "hétérogène" apparaît de temps en temps:

Voir la liaison de serveurs sur MSDN

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 à travers l'entreprise.

sp_addlinkedserver

Un serveur lié permet d'accéder à des requêtes distribuées et hétérogènes sur des sources de données OLE DB.

Et un exemple MSDN d'interrogation d'Active Directory dans "Joining Heterogeneous Data"

Et MSDN à nouveau "Réplication de base de données hétérogène"


6

À ma connaissance, oui.

Un problème que je vois avec votre requête est que vous n'avez aucun moyen de savoir quelle ligne va revenir de votre table liée. S'agit-il simplement d'un code factice ou votre requête est-elle écrite de cette façon?


C'est du code factice, il y a une seule colonne que je récupère dans 40 bases de données et que j'enregistre dans un tableau "rapport d'état" de ces valeurs uniquement.
Ben Brocka

1
Ah d'accord. Je voulais juste vous assurer que vous saviez que la valeur qui est placée dans cette colonne sur Srv.db.dbo.table pourrait être différente selon la version de SQL Server sur laquelle vous exécutez le code. Spécifiquement de SQL 2005 à SQL 2008 en utilisant le code publié, vous obtiendrez une valeur différente.
mrdenny

Maintenant, vous m'avez intéressé, quel est le problème potentiel, juste que je ne sais pas quelle ligne unique je reçois? La table n'a qu'une seule ligne dans ce cas, c'est pourquoi il n'y a pas de WHERE dans la sous-requête.
Ben Brocka

S'il y avait plusieurs lignes dans la table, avec SQL 2005, vous obtenez la première ligne. Avec SQL 2008, la nouvelle table obtiendrait la deuxième ligne. (Je pourrais l'avoir à l'envers.)
mrdenny

J'aurais aimé un article de MS expliquant exactement ce qu'est vraiment une "requête hétérogène" mais il semble qu'une telle chose n'existe pas, donc je marque cela correctement.
Ben Brocka

1

Hétérogène signifie simplement différent. Une requête hétérogène se trouve donc dans une base de données et interroge une base de données DIFFÉRENTE. Étant donné que les bases de données sont différentes, cela évoque la possibilité que les paramètres soient différents, ce qui pourrait entraîner des résultats différents de ceux prévus.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.