OPENDATASOURCE (Transact-SQL)
S’applique à : SQL Server Azure SQL Managed Instance
Fournit les informations de connexion appropriées pour un nom d'objet en quatre parties sans utiliser de nom de serveur lié.
Conventions de la syntaxe Transact-SQL
Syntaxe
OPENDATASOURCE ( 'provider_name', 'init_string' )
Arguments
'provider_name'
Nom enregistré comme PROGID du fournisseur OLE DB utilisé pour accéder à la source de données. provider_name est du type de données char, sans valeur par défaut.
Important
SQL Server Native Client (souvent abrégé en SNAC) a été supprimé dans SQL Server 2022 (16.x) et SQL Server Management Studio 19 (SSMS). Le fournisseur OLE DB pour SQL Server Native Client (SQLNCLI ou SQLNCLI11) et le fournisseur Microsoft OLE DB hérité pour SQL Server (SQLOLEDB) ne sont pas recommandés dans les nouveaux développements. Utilisez à la place le nouveau Microsoft OLE DB Driver (MSOLEDBSQL) pour SQL Server.
'init_string'
Chaîne de connexion transmise à l’interface IDataInitialize du fournisseur de destination. La syntaxe de la chaîne du fournisseur est basée sur des paires mot clé-valeur séparées par un point-virgule, par exemple : 'mot-clé1=valeur ; mot-clé2=valeur'.
Pour plus d'informations sur les paires mot clé-valeur prises en charge par le fournisseur, consultez le kit de développement logiciel (SDK) de Microsoft Data Access. Cette documentation définit la syntaxe de base. Le tableau suivant répertorie les mots clés utilisés fréquemment dans l’argument init_string.
Mot clé | Propriété OLE DB | Valeurs admises et description |
---|---|---|
source de données | DBPROP_INIT_DATASOURCE | Nom de la source de données à laquelle la connexion doit être établie. Ceci est interprété différemment selon les fournisseurs. Pour le fournisseur SQL Server Native Client OLE DB, cette propriété indique le nom du serveur. Pour le fournisseur Jet OLE DB, elle indique le chemin d'accès complet au fichier .mdb ou .xls. |
Emplacement | DBPROP_INIT_LOCATION | Emplacement de la base de données à laquelle la connexion doit être établie |
Extended Properties | DBPROP_INIT_PROVIDERSTRING | Chaîne de connexion spécifique au fournisseur |
Connect timeout | DBPROP_INIT_TIMEOUT | Délai d’expiration au bout duquel la tentative de connexion échoue |
ID d'utilisateur | DBPROP_AUTH_USERID | ID utilisateur à utiliser pour la connexion |
Mot de passe | DBPROP_AUTH_PASSWORD | Mot de passe à utiliser pour la connexion |
Catalogue | DBPROP_INIT_CATALOG | Nom du catalogue initial ou par défaut lors de la connexion à la source de données |
Sécurité intégrée | DBPROP_AUTH_INTEGRATED | SSPI pour spécifier l'authentification Windows |
Remarques
OPENROWSET
hérite toujours du classement de l’instance, quel que soit le classement défini pour les colonnes.
OPENDATASOURCE
peut être utilisé pour accéder à des données distantes à partir de sources de données OLE DB seulement si l’option de Registre DisallowAdhocAccess est explicitement définie sur 0 pour le fournisseur spécifié et que l’option de configuration avancée Ad Hoc Distributed Queries est activée. Lorsque ces options ne sont pas définies, le comportement par défaut n'autorise pas l'accès d'égal à égal.
La fonction OPENDATASOURCE
peut être utilisée aux mêmes endroits de la syntaxe Transact-SQL qu’un nom de serveur lié. OPENDATASOURCE
peut donc constituer la première des quatre parties d’un nom qui fait référence à un nom de table ou de vue (dans une instruction SELECT, INSERT, UPDATE ou DELETE) ou à une procédure stockée distante (dans une instruction EXECUTE). Lors de l’exécution de procédures stockées distantes, OPENDATASOURCE
doit référencer une autre instance de SQL Server. OPENDATASOURCE n'accepte pas de variables pour ses arguments.
Comme la fonction OPENROWSET
, OPENDATASOURCE
doit référencer seulement des sources de données OLE DB qui ne sont pas sollicitées fréquemment. Définissez un serveur lié pour toutes les sources de données qui font l'objet de nombreux accès. Ni OPENDATASOURCE ni OPENROWSET n’offrent toutes les fonctionnalités des définitions de serveur lié, notamment la gestion de la sécurité et la possibilité de consulter des informations du catalogue. Toutes les informations de connexion, y compris les mots de passe, doivent être fournies à chaque appel de OPENDATASOURCE.
Important
L'authentification Windows est plus sûre que l'authentification SQL Server. Veillez à utiliser l'authentification Windows chaque fois que c'est possible. OPENDATASOURCE
ne doit pas être utilisé avec des mots de passe explicites dans la chaîne de connexion.
Les exigences de connexion pour chaque fournisseur sont semblables à celles de ces paramètres lors de la création de serveurs liés. Des informations relatives à de nombreux fournisseurs courants sont présentées dans l’article sp_addlinkedserver (Transact-SQL).
Tout appel à OPENDATASOURCE
, OPENQUERY
ou OPENROWSET
dans la clause FROM
est évalué séparément et indépendamment de tout appel à ces fonctions utilisé comme cible de la mise à jour, même si des arguments identiques sont fournis aux deux appels. En particulier, les conditions de filtre ou de jointure appliquées au résultat de l’un de ces appels n’ont aucun effet sur les résultats de l’autre.
Autorisations
Tous les utilisateurs peuvent exécuter OPENDATASOURCE. Les autorisations utilisées pour la connexion au serveur distant sont déterminées à partir de la chaîne de connexion.
Exemples
R. Utilisation d’OPENDATASOURCE avec SELECT et OLE DB Driver pour SQL Server
L’exemple suivant utilise le pilote Microsoft OLE DB Driver pour SQL Server pour accéder à la table HumanResources.Department
dans la base de données AdventureWorks2022
sur le serveur distant Seattle1
.
Une instruction SELECT
définit l’ensemble de lignes retourné. La chaîne de caractères du fournisseur contient les mots clés Server
et Trusted_Connection
. Ces mots clés sont reconnus par le pilote SQL Server OLE DB Driver.
SELECT GroupName, Name, DepartmentID
FROM OPENDATASOURCE('MSOLEDBSQL', 'Server=Seattle1;Database=AdventureWorks2022;TrustServerCertificate=Yes;Trusted_Connection=Yes;').HumanResources.Department
ORDER BY GroupName, Name;
B. Utilisation d’OPENDATASOURCE avec SELECT et le fournisseur SQL Server OLE DB
L'exemple suivant crée une connexion appropriée à l'instance Payroll
de SQL Server sur le serveur London
, puis interroge la table AdventureWorks2022.HumanResources.Employee
.
Notes
L’utilisation de SQLNCLI redirige SQL Server vers la version la plus récente du fournisseur SQL Server Native Client OLE DB. Le fournisseur OLE DB doit être inscrit dans le Registre avec le PROGID spécifié.
Important
Le fournisseur SQL Server Native Client OLE DB (SQLNCLI) reste déprécié, et il n’est pas recommandé de l’utiliser pour les nouveaux développements. Au lieu de cela, utilisez le nouveau Microsoft OLE DB Driver pour SQL Server (MSOLEDBSQL), qui sera mis à jour avec les fonctionnalités serveur les plus récentes.
SELECT *
FROM OPENDATASOURCE('SQLNCLI',
'Data Source=London\Payroll;Integrated Security=SSPI')
.AdventureWorks2022.HumanResources.Employee;
C. Utilisation du fournisseur Microsoft OLE DB pour Jet
L’exemple suivant crée une connexion ad hoc avec une feuille de calcul Excel au format de document Word 1997 - 2003.
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\DataFolder\Documents\TestExcel.xls;Extended Properties=EXCEL 5.0')...[Sheet1$] ;