Consignes pour l'utilisation des requêtes distribuées

À partir du moment où le fournisseur prend en charge les interfaces OLE DB requises, chaque classe d'instruction Transact-SQL mentionnée dans cette rubrique est autorisée.

Instructions Transact-SQL

Voici la liste des sous-ensembles de langage Transact-SQL qui sont autorisés sur les tables distantes accessibles par l'intermédiaire des noms de serveurs liés ou des noms appropriés :

  • Toutes les requêtes qui ont la forme standard de la clause SELECT select_list FROM clause WHERE sont autorisées. La clause INTO new_table_name de SELECT n'est pas autorisée lorsque new_table_name fait référence à une table distante.

  • Dans les instructions SELECT, INSERT, UPDATE et DELETE, les colonnes des tables distantes ne peuvent pas être qualifiées avec un nom de table en une seule ou en quatre parties. Les tables distantes doivent posséder des alias dans la clause FROM et le nom d’alias doit être utilisé pour qualifier le nom de colonne.

  • Les tables ayant des colonnes xml ne peuvent pas être interrogées, même si la requête accède à des colonnes non xml de la table.

  • Lorsqu'une colonne d'objets de grande taille (LOB) issue d'une table distante est spécifiée en tant qu'élément dans le paramètre select_list d'une instruction SELECT, cette instruction ne peut pas contenir de clause ORDER BY.

  • Les prédicats IS NULL et IS NOT NULL ne peuvent pas faire référence à des colonnes LOB dans une table distante.

  • GROUP BY ALL n'est pas autorisé dans une requête distribuée lorsque la requête a également une clause WHERE. GROUP BY sans spécifier ALL est pris en charge.

  • Les instructions INSERT sont autorisées sur les tables distantes à partir du moment où le fournisseur respecte les exigences OLE DB applicables aux instructions INSERT. Pour plus d'informations, consultez Éléments requis pour l'instruction INSERT pour les fournisseurs OLE DB.

  • Les constantes NULL ne peuvent pas être insérées dans une colonne timestamp via une requête distribuée.

  • $IDENTITY et $ROWGUIDCOL ne sont pas pris en charge avec les requêtes distribuées. Des valeurs explicites ne peuvent pas être insérées dans des colonnes d'identité de tables distantes.

  • Les instructions UPDATE et DELETE sont autorisées sur les tables distantes si le fournisseur respecte les exigences de l'interface OLE DB applicables à la table spécifiée. Pour plus d'informations, consultez Conditions associées aux instructions UPDATE et DELETE pour les fournisseurs OLE DB.

  • Une table distante peut être mise à jour ou supprimée par l'intermédiaire d'un curseur défini sur une requête distribuée, lorsque la table distante concernée est spécifiée dans l'instruction UPDATE ou DELETE (UPDATE ou DELETE remote_table WHERE CURRENT OF cursor_name) si le fournisseur remplit les conditions nécessaires à une mise à jour de la table distante. Pour plus d'informations, consultez Utilisation de curseurs avec des requêtes distribuées.

  • Les instructions READTEXT, WRITETEXT et UPDATETEXT ne sont pas prises en charge sur les tables distantes.

  • Les colonnes contenant des types de données objets de grande taille (tels que text, ntext ou image) ne peuvent pas être référencées dans des opérations de mise à jour ou d'insertion si le fournisseur est instancié en dehors du processus SQL Server AllowInProcess est égale a 0. Pour plus d'informations, consultez Configuration des fournisseurs OLE DB pour l'exécution de requêtes distribuées.

  • Les instructions du langage de définition de données, telles que les instructions CREATE, ALTER ou DROP, ne sont pas autorisées sur les serveurs liés.

  • Une instruction EXECUTE peut envoyer une commande directe à un serveur lié en utilisant le mot clé AT. L'exécution de l'instruction dépend de la configuration RPC du serveur lié et de la capacité du serveur lié à exécuter l'instruction.

  • Aucune autre opération ou instruction de niveau base de données n'est autorisée sur les serveurs liés.

Autres consignes

Restrictions et consignes supplémentaires :

  • Les curseurs STATIC et INSENSITIVE peuvent référencer des tables distantes. Les curseurs KEYSET peuvent faire référence à des tables distantes si le fournisseur OLE DB répond à certaines exigences. Pour plus d'informations sur ces exigences, consultez Conditions associées aux curseurs pilotés par jeu de clés pour les fournisseurs OLE DB. Aucun autre type de curseur ne peut faire référence à une table distante.

  • Les procédures stockées sont prises en charge uniquement sur les sources de données SQL Server.

  • Pour qu'une connexion puisse exécuter des requêtes distribuées, les options ANSI_NULLS et ANSI_WARNINGS de la connexion doivent être activées (ON). Pour plus d'informations, consultez SET ANSI_DEFAULTS (Transact-SQL).

  • Pour créer les meilleurs plans de requête lorsque vous utilisez une table sur un serveur lié, le processeur de requêtes doit posséder des statistiques de distribution de données du serveur lié. Les utilisateurs qui ont des autorisations limitées sur des colonnes de la table peuvent ne pas avoir d'autorisations suffisantes pour obtenir toutes les statistiques utiles, peuvent recevoir un plan de requête moins efficace et être confrontés à des performances médiocres. Si le serveur lié est une instance de SQL Server, l'utilisateur doit, pour obtenir l'ensemble des statistiques disponibles, posséder la table ou être membre du rôle serveur fixe sysadmin, du rôle de base de données fixe db_owner ou du rôle de base de données fixe db_ddladmin sur le serveur lié.