Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. |
Traduction
Source
|
OPENROWSET (Transact-SQL)
Inclut toutes les informations de connexion exigées pour accéder à des données distantes à partir d'une source de données OLE DB. Cette méthode est une autre façon d'accéder à des tables dans un serveur lié et constitue une méthode efficace pour vous connecter et accéder à des données distantes en utilisant OLE DB. Pour faire des références plus fréquentes à des sources de données OLE DB, utilisez plutôt des serveurs liés. Pour plus d'informations, consultez Serveurs liés (Moteur de base de données). La fonction OPENROWSET peut être référencée dans la clause FROM d'une requête comme s'il s'agissait du nom d'une table. La fonction OPENROWSET peut également être référencée comme table cible d'une instruction INSERT, UPDATE ou DELETE, en fonction des capacités du fournisseur OLE DB. Bien que la requête puisse retourner plusieurs jeux de résultats, OPENROWSET ne retourne que le premier.
OPENROWSET prend également en charge les opérations de chargement en masse par l'intermédiaire d'un fournisseur BULK intégré qui permet de lire les données d'un fichier et de les retourner comme un ensemble de lignes.
OPENROWSET
( { 'provider_name' , { 'datasource' ; 'user_id' ; 'password'
| 'provider_string' }
, { [ catalog. ] [ schema. ] object
| 'query'
}
| BULK 'data_file' ,
{ FORMATFILE = 'format_file_path' [ <bulk_options> ]
| SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }
} )
<bulk_options> ::=
[ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
[ , ERRORFILE = 'file_name' ]
[ , FIRSTROW = first_row ]
[ , LASTROW = last_row ]
[ , MAXERRORS = maximum_errors ]
[ , ROWS_PER_BATCH = rows_per_batch ]
[ , ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) [ UNIQUE ]
OPENROWSET ne peut être utilisé pour accéder à des données distantes à partir de sources de données OLE DB que si l'option de Registre DisallowAdhocAccess est explicitement définie avec la valeur 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.
Lors de l'accès à des sources de données OLE DB distantes, l'identité des connexions approuvées n'est pas automatiquement déléguée du serveur auquel le client est connecté au serveur qui est interrogé. Il est nécessaire de configurer la délégation de l'authentification.
Les noms de catalogues et de schémas sont requis si le fournisseur OLE DB prend en charge plusieurs catalogues et schémas dans la source de données spécifiée. Les valeurs de catalog et schema peuvent être omises si le fournisseur OLE DB ne les prend pas en charge. Si le fournisseur prend en charge uniquement les noms de schémas, il est nécessaire de spécifier un nom en deux parties, sous la forme schema.object doit être spécifié. Si le fournisseur prend en charge uniquement les noms de catalogues, il est nécessaire de spécifier un nom en trois parties, sous la forme catalog.schema.object doit être spécifié. Il est nécessaire de spécifier des noms en trois parties pour les requêtes directes qui utilisent le fournisseur SQL Server Native Client OLE DB. Pour plus d'informations, consultez Conventions de la syntaxe Transact-SQL (Transact-SQL).
OPENROWSET n'accepte pas de variables pour ses arguments.
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 sur le résultat de l'un de ces appels n'ont aucun effet sur les résultats de l'autre.
Utilisation de OPENROWSET avec l'option BULK
Les améliorations Transact-SQL suivantes prennent en charge la fonction OPENROWSET(BULK…) :
-
Une clause FROM utilisée avec SELECT peut appeler OPENROWSET(BULK…) plutôt qu'un nom de table, tout en conservant la totalité des fonctionnalités de SELECT.
OPENROWSET utilisée avec l'option BULK nécessite un nom de corrélation, également baptisé variable de plage ou alias, dans la clause FROM. Vous pouvez définir des alias de colonnes. Si une liste d'alias de colonnes n'est pas spécifiée, le fichier de format doit comporter les noms des colonnes. La spécification des alias de colonnes remplace les noms de colonnes dans le fichier de format, par exemple :
FROM OPENROWSET(BULK...) AS table_alias
FROM OPENROWSET(BULK...) AS table_alias(column_alias,... n)
-
Une instruction SELECT…FROM OPENROWSET(BULK...) interroge directement les données d'un fichier, sans les importer dans une table. Les instructions SELECT…FROM OPENROWSET(BULK…) peuvent également énumérer les alias de colonnes en bloc en utilisant un fichier de format pour spécifier les noms de colonnes ainsi que les types de données.
-
Utiliser OPENROWSET(BULK...) en tant que table source dans une instruction INSERT ou MERGE importe en bloc les données du fichier de données dans une table SQL Server. Pour plus d'informations, consultez Importer des données en bloc à l'aide de BULK INSERT ou OPENROWSET(BULK...) (SQL Server).
-
Lorsque l'option OPENROWSET BULK est utilisée avec une instruction INSERT, la clause BULK prend en charge les indicateurs de table. En plus des indicateurs de table normaux, tels que TABLOCK, la clause BULK peut accepter les indicateurs de table spécialisés suivants : IGNORE_CONSTRAINTS (ignore uniquement les contraintes CHECK et FOREIGN KEY), IGNORE_TRIGGERS, KEEPDEFAULTS et KEEPIDENTITY. Pour plus d'informations, consultez Indicateurs de table (Transact-SQL).
Pour plus d'informations sur l'utilisation des instructions INSERT...SELECT * FROM OPENROWSET(BULK...), consultez Importation et exportation en bloc de données (SQL Server). Pour obtenir des informations sur les opérations d'insertion de lignes qui sont exécutées par importation en bloc et enregistrées dans le journal des transactions, consultez Conditions requises pour une journalisation minimale dans l'importation en bloc.
Remarque
|
|---|
|
Lorsque vous utilisez OPENROWSET, il est important que vous compreniez la manière dont SQL Server gère l'emprunt d'identité. Pour plus d'informations sur les questions de sécurité, consultez Importer des données en bloc à l'aide de BULK INSERT ou OPENROWSET(BULK...) (SQL Server). |
L'importation en bloc de données SQLCHAR, SQLNCHAR ou SQLBINARY
OPENROWSET(BULK...) suppose que, si elle n'est pas spécifiée, la longueur maximale des données SQLCHAR, SQLNCHAR ou SQLBINARY ne dépasse pas 8 000 octets. Si les données importées figurent dans un champ de données LOB qui contient des objets varchar(max), nvarchar(max) ou varbinary(max) qui dépasse 8 000 octets, vous devez utiliser un fichier de format XML qui définit la longueur maximale pour le champ de données. Pour spécifier la longueur maximale, modifiez le fichier de format et déclarez l'attribut MAX_LENGTH.
Remarque
|
|---|
|
Un fichier de format généré automatiquement ne spécifie pas la longueur ou la longueur maximale d'un champ LOB. Toutefois, vous pouvez modifier un fichier de format et spécifier manuellement la longueur ou la longueur maximale. |
Importation et exportation en bloc de documents SQLXML
Pour exporter ou importer en bloc des données SQLXML, utilisez l'un des types de données ci-dessous dans votre fichier de format.
|
Type de données |
Effet |
|---|---|
|
SQLCHAR ou SQLVARYCHAR |
Les données sont envoyées dans la page de codes du client ou dans la page de codes impliquée par le classement. |
|
SQLNCHAR ou SQLNVARCHAR |
Les données sont envoyées au format Unicode. |
|
SQLBINARY ou SQLVARYBIN |
Les données sont envoyées sans conversion. |
A.Utilisation de OPENROWSET avec SELECT et le fournisseur SQL Server Native Client OLE DB
L'exemple suivant utilise le fournisseur SQL Server Native Client OLE DB pour accéder à la table HumanResources.Department de la base de données AdventureWorks2012 sur le serveur distant Seattle1. (L'utilisation de SQLNCLI et SQL Server vous redirigera vers la version la plus récente du fournisseur SQL Server Native Client OLE DB.) 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 fournisseur SQL Server Native Client OLE DB.
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM AdventureWorks2012.HumanResources.Department
ORDER BY GroupName, Name') AS a;
B.Utilisation du fournisseur Microsoft OLE DB pour Jet
L'exemple suivant accède à la table Customers de la base de données Microsoft Access Northwind via le fournisseur Microsoft OLE DB pour Jet.
Remarque
|
|---|
|
L'exécution de ce code exemple suppose que Microsoft Access est installé. Pour exécuter cet exemple, vous devez installer la base de données Northwind. |
SELECT CustomerID, CompanyName
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',Customers);
GO
C.Utilisation de OPENROWSET avec une autre table dans une jointure interne INNER JOIN
Le code exemple suivant sélectionne toutes les données de la table Customers dans la base de données Northwind installée sur l'instance locale de SQL Server et dans la table Orders de la base de données Northwind Access stockée sur le même ordinateur.
Remarque
|
|---|
|
L'exécution de ce code exemple suppose que Microsoft Access est installé. Pour exécuter cet exemple, vous devez installer la base de données Northwind. |
USE Northwind ;
GO
SELECT c.*, o.*
FROM Northwind.dbo.Customers AS c
INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';'admin';'', Orders)
AS o
ON c.CustomerID = o.CustomerID ;
GO
D.Utilisation de OPENROWSET pour insérer en bloc un fichier de données dans une colonne de type varbinary(max)
Le code exemple suivant crée une petite table aux fins de démonstration et insère dans une colonne varbinary(max) les données du fichier Text1.txt situé dans le répertoire racine C:.
USE AdventureWorks2012;
GO
CREATE TABLE myTable(FileName nvarchar(60),
FileType nvarchar(60), Document varbinary(max));
GO
INSERT INTO myTable(FileName, FileType, Document)
SELECT 'Text1.txt' AS FileName,
'.txt' AS FileType,
* FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document;
GO
E.Utilisation du fournisseur OPENROWSET BULK avec un fichier de format pour récupérer des lignes dans un fichier texte
Le code exemple suivant utilise un fichier de format pour extraire des lignes d'un fichier texte dont les données sont délimitées par des tabulations, values.txt, qui contient les données suivantes :
1 Data Item 1 2 Data Item 2 3 Data Item 3
Le fichier de format, values.fmt, décrit les colonnes du fichier values.txt :
9.0 2 1 SQLCHAR 0 10 "\t" 1 ID SQL_Latin1_General_Cp437_BIN 2 SQLCHAR 0 40 "\r\n" 2 Description SQL_Latin1_General_Cp437_BIN
Voici la requête qui récupère ces données :
SELECT a.* FROM OPENROWSET( BULK 'c:\test\values.txt', FORMATFILE = 'c:\test\values.fmt') AS a;
Autres exemples
Pour obtenir plus d'exemples qui illustrent l'utilisation des instructions INSERT...SELECT * FROM OPENROWSET(BULK...), consultez les rubriques suivantes :
-
Exemples d'importation et d'exportation en bloc de documents XML (SQL Server)
-
Conserver des valeurs d'identité lors de l'importation de données en bloc (SQL Server)
-
Conserver les valeurs NULL ou UseDefault lors de l'importation en bloc (SQL Server)
-
Utiliser un fichier de format pour importer des données en bloc (SQL Server)
-
Utiliser le format caractère Unicode pour importer ou exporter des données (SQL Server)
-
Utiliser un fichier de format pour ignorer une colonne de table (SQL Server)
-
Utiliser un fichier de format pour ignorer un champ de données (SQL Server)
Remarque
Important