Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La fonctionnalité de copie en bloc SQL Server prend en charge le transfert de grandes quantités de données dans ou hors d’une table ou d’une vue SQL Server. Les données peuvent également être transférées en spécifiant une instruction SELECT. Les données peuvent être déplacées entre SQL Server et un fichier de données du système d’exploitation, tel qu’un fichier ASCII. Le fichier de données peut avoir différents formats ; le format est défini pour copier en bloc dans un fichier de format. Si vous le souhaitez, les données peuvent être chargées dans des variables de programme et transférées vers SQL Server à l’aide de fonctions et de méthodes de copie en bloc.
Pour obtenir un exemple d’application qui illustre cette fonctionnalité, consultez Copie en bloc de données à l’aide d’IRowsetFastLoad (OLE DB).
Une application utilise généralement la copie en bloc de l’une des manières suivantes :
Copie en bloc à partir d’une table, d’une vue ou d’un jeu de résultats d’une instruction Transact-SQL dans un fichier de données dans lequel les données sont stockées au même format que la table ou la vue.
Il s’agit d’un fichier de données en mode natif.
Copie en bloc à partir d’une table, d’une vue ou d’un jeu de résultats d’une instruction Transact-SQL dans un fichier de données où les données sont stockées dans un format autre que celui de la table ou de la vue.
Dans ce cas, un fichier de format distinct est créé qui définit les caractéristiques (type de données, position, longueur, terminateur, et ainsi de suite) de chaque colonne telle qu’elle est stockée dans le fichier de données. Si toutes les colonnes sont converties en format caractère, le fichier résultant est appelé fichier de données en mode caractère.
Copie en bloc à partir d’un fichier de données dans une table ou une vue.
Si nécessaire, un fichier de format est utilisé pour déterminer la disposition du fichier de données.
Chargez des données dans des variables de programme, puis importez les données dans une table ou une vue à l’aide des fonctions de copie en bloc pour la copie en bloc dans une ligne à la fois.
Les fichiers de données utilisés par les fonctions de copie en bloc n’ont pas besoin d’être créés par un autre programme de copie en bloc. Tout autre système peut générer un fichier de données et mettre en forme un fichier en fonction des définitions de copie en bloc ; ces fichiers peuvent ensuite être utilisés avec un programme de copie en bloc SQL Server pour importer des données dans SQL Server. Par exemple, vous pouvez exporter des données à partir d’une feuille de calcul dans un fichier délimité par un onglet, générer un fichier de format décrivant le fichier délimité par l’onglet, puis utiliser un programme de copie en bloc pour importer rapidement les données dans SQL Server. Les fichiers de données générés par la copie en bloc peuvent également être importés dans d’autres applications. Par exemple, vous pouvez utiliser des fonctions de copie en bloc pour exporter des données d’une table ou d’une vue dans un fichier délimité par un onglet qui peut ensuite être chargé dans une feuille de calcul.
Les programmeurs codent des applications pour utiliser les fonctions de copie en bloc doivent respecter les règles générales pour de bonnes performances de copie en bloc. Pour plus d’informations sur la prise en charge des opérations de copie en bloc dans SQL Server, consultez Importation et exportation en bloc de données (SQL Server).
Limitations et restrictions
Un type clR défini par l’utilisateur (UDT) doit être lié en tant que données binaires. Même si un fichier de format spécifie SQLCHAR comme type de données pour une colonne UDT cible, l’utilitaire BCP traite les données comme binaires.
N’utilisez pas SET FMTONLY OFF avec des opérations de copie en bloc. SET FMTONLY OFF peut entraîner l’échec de votre opération de copie en bloc ou donner des résultats inattendus.
Fournisseur OLE DB SQL Server Native Client
Le fournisseur OLE DB SQL Server Native Client implémente deux méthodes pour effectuer des opérations de copie en bloc avec une base de données SQL Server. La première méthode implique l’utilisation de l’interface IRowsetFastLoad pour les opérations de copie en bloc basées sur la mémoire ; et le deuxième implique l’utilisation de l’interface IBCPSession pour les opérations de copie en bloc basées sur des fichiers.
Utilisation des opérations de copie en bloc basées sur la mémoire
Le fournisseur OLE DB SQL Server Native Client implémente l’interface IRowsetFastLoad pour exposer la prise en charge des opérations de copie en bloc basées sur la mémoire SQL Server. L’interface IRowsetFastLoad implémente les méthodes IRowsetFastLoad ::Commit et IRowsetFastLoad ::InsertRow .
Activation d’une session pour IRowsetFastLoad
Le consommateur avertit le fournisseur OLE DB SQL Server Native Client de sa nécessité de copier en bloc en définissant la propriété de source de données spécifique au fournisseur OLE DB SQL Server Native Client SSPROP_ENABLEFASTLOAD sur VARIANT_TRUE. Avec la propriété définie sur la source de données, le consommateur crée une session de fournisseur OLE DB SQL Server Native Client. La nouvelle session permet à un consommateur d’accéder à l’interface IRowsetFastLoad .
Remarque
Si l’interface IDataInitialize est utilisée pour initialiser la source de données, il est nécessaire de définir la propriété SSPROP_IRowsetFastLoad dans le paramètre rgPropertySets de la méthode IOpenRowset ::OpenRowset ; sinon, l’appel à la méthode OpenRowset retourne E_NOINTERFACE.
L’activation d’une session pour la copie en bloc limite la prise en charge du fournisseur OLE DB SQL Server Native Client pour les interfaces sur la session. Une session avec copie en bloc expose uniquement les interfaces suivantes :
IDBSchemaRowset
IGetDataSource
IOpenRowset
ISupportErrorInfo
ITransactionJoin
Pour désactiver la création d’ensembles de lignes prenant en charge la copie en bloc et provoquer la restauration de la session du fournisseur OLE DB SQL Server Native Client vers un traitement standard, réinitialisez SSPROP_ENABLEFASTLOAD sur VARIANT_FALSE.
Ensembles de lignes IRowsetFastLoad
Les ensembles de lignes de copie en bloc du fournisseur OLE DB SQL Server Native Client sont en écriture seule, mais ils exposent des interfaces qui permettent au consommateur de déterminer la structure d’une table SQL Server. Les interfaces suivantes sont exposées sur un ensemble de lignes du fournisseur OLE DB SQL Server Native Client prenant en charge la copie en bloc :
IAccessor
IColumnsInfo
IColumnsRowset
IConvertType
IRowsetFastLoad
IRowsetInfo
ISupportErrorInfo
Les propriétés spécifiques au fournisseur SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS et SSPROP_FASTLOADKEEPIDENTITY contrôler les comportements d’un ensemble de lignes de copie en bloc du fournisseur OLE DB SQL Server Native Client. Les propriétés sont spécifiées dans le membre rgProperties d’un membre de paramètre rgPropertySetsIOpenRowset.
| ID de propriété | Descriptif |
|---|---|
| SSPROP_FASTLOADKEEPIDENTITY | Colonne : Non R/W : lecture/écriture Type : VT_BOOL Par défaut : VARIANT_FALSE Description : gère les valeurs d’identité fournies par le consommateur. VARIANT_FALSE : les valeurs d’une colonne d’identité dans la table SQL Server sont générées par SQL Server. Toute valeur liée à la colonne est ignorée par le fournisseur OLE DB SQL Server Native Client. VARIANT_TRUE : le consommateur lie un accesseur fournissant une valeur pour une colonne d’identité SQL Server. La propriété d’identité n’est pas disponible sur les colonnes acceptant NULL. Par conséquent, le consommateur fournit une valeur unique sur chaque appel IRowsetFastLoad ::Insert . |
| SSPROP_FASTLOADKEEPNULLS | Colonne : Non R/W : lecture/écriture Type : VT_BOOL Par défaut : VARIANT_FALSE Description : gère NULL pour les colonnes avec une contrainte DEFAULT. Affecte uniquement les colonnes SQL Server qui acceptent NULL et qui ont une contrainte DEFAULT appliquée. VARIANT_FALSE : SQL Server insère la valeur par défaut de la colonne lorsque le consommateur du fournisseur OLE DB SQL Server Native Client insère une ligne contenant LA valeur NULL pour la colonne. VARIANT_TRUE : SQL Server insère NULL pour la valeur de colonne lorsque le consommateur du fournisseur OLE DB SQL Server Native Client insère une ligne contenant NULL pour la colonne. |
| SSPROP_FASTLOADOPTIONS | Colonne : Non R/W : lecture/écriture Type : VT_BSTR Valeur par défaut : aucun Description : cette propriété est identique à l’indicateur-h "hint[,... n]" option de l’utilitaire bcp. Les chaînes suivantes peuvent être utilisées comme options dans la copie en bloc de données dans une table. ORDER(column[ASC DESC | ][,...n]) : tri de l’ordre des données dans le fichier de données. Les performances de copie en bloc sont améliorées si le fichier de données en cours de chargement est trié en fonction de l’index cluster sur la table. = ROWS_PER_BATCHbb : nombre de lignes de données par lot (en tant que bb). Le serveur optimise le chargement en masse en fonction de la valeur de bb. Par défaut, ROWS_PER_BATCH est inconnu. = KILOBYTES_PER_BATCHcc : nombre de kilo-octets (Ko) de données par lot (en tant que cc). Par défaut, KILOBYTES_PER_BATCH est inconnu. TABLOCK : un verrou au niveau de la table est acquis pendant la durée de l’opération de copie en bloc. Cette option améliore considérablement les performances, car la conservation d’un verrou uniquement pendant la durée de l’opération de copie en bloc réduit la contention de verrou sur la table. Une table peut être chargée simultanément par plusieurs clients si la table n’a pas d’index et TABLOCK est spécifiée. Par défaut, le comportement de verrouillage est déterminé par le verrou de table d’option de table sur le chargement en bloc. CHECK_CONSTRAINTS : toutes les contraintes sur table_name sont vérifiées pendant l’opération de copie en bloc. Par défaut, les contraintes sont ignorées. FIRE_TRIGGER : SQL Server utilise le contrôle de version des lignes pour les déclencheurs et stocke les versions de ligne dans le magasin de versions dans tempdb. Par conséquent, les optimisations de journalisation en bloc sont disponibles même lorsque les déclencheurs sont activés. Avant d’importer en bloc un lot avec un grand nombre de lignes avec des déclencheurs activés, vous devrez peut-être développer la taille de tempdb. |
Utilisation d’opérations de copie en bloc basées sur des fichiers
Le fournisseur OLE DB SQL Server Native Client implémente l’interface IBCPSession pour exposer la prise en charge des opérations de copie en bloc basées sur des fichiers SQL Server. L’interface IBCPSession implémente l’IBCPSession ::BCPColFmt, IBCPSession ::BCPColumns, IBCPSession ::BCPControl, IBCPSession ::BCPDone, IBCPSession ::BCPExec, IBCPSession ::BCPInit, IBCPSession ::BCPReadFmt et IBCPSession ::BCPWriteFmt, méthodes.
Pilote ODBC SQL Server Native Client
Le pilote ODBC SQL Server Native Client conserve la même prise en charge des opérations de copie en bloc qui faisaient partie des versions précédentes du pilote ODBC SQL Server. Pour plus d’informations sur les opérations de copie en bloc à l’aide du pilote ODBC SQL Server Native Client, consultez Exécution d’opérations de copie en bloc (ODBC)
Voir aussi
Fonctionnalités de SQL Server Native Client
Propriétés de la source de données (OLE DB)
Importation et exportation en bloc de données (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)
Optimisation des performances d’importation en bloc