Modifications de la copie en bloc pour les types de date et d’heure améliorés (OLE DB)
S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
Cet article décrit les améliorations de date/heure permettant de prendre en charge les fonctionnalités dans OLE DB Driver pour SQL Server.
Fichiers de format
Lors de la génération interactive de fichiers de format, le tableau ci-dessous décrit l'entrée utilisée pour spécifier des types date/heure et les noms de type de données de fichier hôte correspondants.
type de stockage de fichier | Type de données du fichier hôte | Réponse à l’invite : « Entrez le type de stockage de fichier du champ <field_name> [<par défaut>]: » |
---|---|---|
Datetime | SQLDATETIME | d |
Smalldatetime | SQLDATETIM4 | D |
Date | SQLDATE | de |
Temps | SQLTIME | te |
Datetime2 | SQLDATETIME2 | d2 |
Datetimeoffset | SQLDATETIMEOFFSET | do |
Le fichier au format XML XSD possédera les ajouts suivants :
<xs:complexType name="SQLDATETIME2">
<xs:complexContent>
<xs:extension base="bl:Fixed"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SQLDATETIMEOFFSET">
<xs:complexContent>
<xs:extension base="bl:Fixed"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SQLDATE">
<xs:complexContent>
<xs:extension base="bl:Fixed"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SQLTIME">
<xs:complexContent>
<xs:extension base="bl:Fixed"/>
</xs:complexContent>
</xs:complexType>
Fichiers de données de type caractère
Dans les fichiers de données de type caractère, les valeurs de date et d'heure sont représentées comme décrit dans la section « Formats de données : Chaînes et littéraux » de Prise en charge des types de données pour les améliorations de date et heure OLE DB pour OLE DB.
Dans les fichiers de données natifs, les valeurs de date et d’heure pour les quatre nouveaux types sont sous la forme de leurs représentations TDS avec une échelle de 7 (car ceci est le maximum pris en charge par SQL Server et les fichiers de données bcp ne stockent pas l’échelle de ces colonnes). Aucune modification n’est apportée au stockage des types datetime et smalldatetime existants, ni à leurs représentations de flux de données tabulaires (TDS).
Les tailles de stockage pour les différents types de stockage sont les suivantes pour OLE DB :
type de stockage de fichier | Taille de stockage en octets |
---|---|
DATETIME | 8 |
smalldatetime | 4 |
Date | 3 |
time | 6 |
datetime2 | 9 |
datetimeoffset | 11 |
Types BCP dans msoledbsql.h
Les types suivants sont définis dans msoledbsql.h. Ces types sont passés avec le paramètre eUserDataType de IBCPSession::BCPColFmt dans OLE DB.
type de stockage de fichier | Type de données du fichier hôte | Saisissez msoledbsql.h pour l’utiliser avec IBCPSession::BCPColFmt | Valeur |
---|---|---|---|
Datetime | SQLDATETIME | BCP_TYPE_SQLDATETIME | 0x3d |
Smalldatetime | SQLDATETIM4 | BCP_TYPE_SQLDATETIM4 | 0x3a |
Date | SQLDATE | BCP_TYPE_SQLDATE | 0x28 |
Temps | SQLTIME | BCP_TYPE_SQLTIME | 0x29 |
Datetime2 | SQLDATETIME2 | BCP_TYPE_SQLDATETIME2 | 0x2a |
Datetimeoffset | SQLDATETIMEOFFSET | BCP_TYPE_SQLDATETIMEOFFSET | 0x2b |
Conversions des types de données BCP
Les tableaux ci-dessous fournissent des informations de conversion.
Remarque pour OLE DB : Les conversions suivantes sont effectuées par IBCPSession. IRowsetFastLoad utilise des conversions OLE DB telles que définies dans Conversions effectuées de client à serveur. Notez que les valeurs datetime sont arrondies au 1/300e de seconde et que les secondes des valeurs smalldatetime sont mises à zéro après l'exécution des conversions clientes décrites ci-dessous. L'arrondi des valeurs datetime est propagé aux heures et aux minutes, mais pas à la date.
À --> À partir |
Date | time | smalldatetime | DATETIME | datetime2 | datetimeoffset | char | wchar |
---|---|---|---|---|---|---|---|---|
Date | 1 | - | 1, 6 | 1, 6 | 1, 6 | 1, 5, 6 | 1, 3 | 1, 3 |
Temps | N/A | 1, 10 | 1, 7, 10 | 1, 7, 10 | 1, 7, 10 | 1, 5, 7, 10 | 1, 3 | 1, 3 |
Smalldatetime | 1, 2 | 1, 4, 10 | 1 | 1 | 1, 10 | 1, 5, 10 | 1, 11 | 1, 11 |
Datetime | 1, 2 | 1, 4, 10 | 1, 12 | 1 | 1, 10 | 1, 5, 10 | 1, 11 | 1, 11 |
Datetime2 | 1, 2 | 1, 4, 10 | 1, 12 | 1, 10 | 1, 10 | 1, 5, 10 | 1, 3 | 1, 3 |
Datetimeoffset | 1, 2, 8 | 1, 4, 8, 10 | 1, 8, 10 | 1, 8, 10 | 1, 8, 10 | 1, 10 | 1, 3 | 1, 3 |
Char/wchar (date) | 9 | - | 9, 6, 12 | 9, 6, 12 | 9, 6 | 9, 5, 6 | N/A | N/A |
Char/wchar (heure) | - | 9, 10 | 9, 7, 10, 12 | 9, 7, 10, 12 | 9, 7, 10 | 9, 5, 7, 10 | N/A | N/A |
Char/wchar (datetime) | 9, 2 | 9, 4, 10 | 9, 10, 12 | 9, 10, 12 | 9, 10 | 9, 5, 10 | N/A | N/A |
Char/wchar (datetimeoffset) | 9, 2, 8 | 9, 4, 8, 10 | 9, 8, 10, 12 | 9, 8, 10, 12 | 9, 8, 10 | 9, 10 | N/A | N/A |
Liste des symboles
Symbole | Signification |
---|---|
- | Aucune conversion n'est prise en charge. |
1 | Si les données fournies ne sont pas valides, une erreur est publiée. Pour les valeurs datetimeoffset, la partie heure doit se situer dans la plage après la conversion au format UTC, même si aucune conversion au format UTC n'est demandée. Ceci tient au fait que TDS et le serveur normalisent toujours l'heure dans les valeurs datetimeoffset pour UTC. Par conséquent, le client doit vérifier que les composants heure se situent dans la plage prise en charge après la conversion au format UTC. |
2 | Le composant heure est ignoré. |
3 | S’il se produit une troncation avec perte de données, une erreur est publiée. Pour datetime2, le nombre de chiffres des fractions de seconde (l'échelle) est déterminé à partir de la taille de la colonne de destination, conformément au tableau suivant. Pour les tailles de colonne supérieures à la plage du tableau, une échelle de 9 est nécessaire. Cette conversion accepte jusqu'à neuf chiffres de fractions de seconde, valeur maximale autorisée par OLE DB. Type : DBTIME2 Échelle impliquée 08 Échelle impliquée 1..9 1..9 Type : DBTIMESTAMP Échelle impliquée 0 : 19 Échelle impliquée 1..9 : 21..29 Type : DBTIMESTAMPOFFSET Échelle impliquée 0 : 26 Échelle impliquée 1..9 : 28..36 |
4 | Le composant date est ignoré. |
5 | Le composant fuseau horaire est défini au format UTC (par exemple, 00:00). |
6 | L'heure est définie avec la valeur zéro. |
7 | La date est définie avec la valeur 1900-01-01. |
8 | Le décalage horaire est ignoré. |
9 | La chaîne est analysée et convertie en valeur date, datetime, datetimeoffset ou time, selon le premier caractère de ponctuation rencontré et la présence de composants restants. La chaîne est ensuite convertie en type cible, selon les règles fournies dans le tableau à la fin de cet article pour le type source découvert par ce processus. Si les données fournies ne peuvent pas être analysées sans erreur, ou si un composant quelconque est en dehors de la plage autorisée, ou s'il n'y a aucune conversion du type de littéral au type cible, une erreur est publiée. Pour les paramètres datetime et smalldatetime, si l’année est en dehors de la plage prise en charge par ces types, une erreur est publiée. Pour datetimeoffset, la valeur doit se situer dans la plage après la conversion au format UTC, même si aucune conversion au format UTC n'est demandée. Cela tient au fait que TDS et le serveur normalisent toujours l'heure des valeurs datetimeoffset pour UTC, si bien que le client doit vérifier que les composants heure se situent dans la plage prise en charge après la conversion au format UTC. Si la valeur n’est pas comprise dans la plage UTC prise en charge, une erreur est publiée. |
10 | Pour les conversions de client à serveur, s'il se produit une troncation avec perte de données, une erreur est publiée. Cette erreur se produit également si la valeur est située en dehors de la plage qui peut être représentée par la plage UTC utilisée par le serveur. S'il se produit une troncation de secondes ou de fractions de seconde lors d'une conversion de serveur à client, seul un avertissement est émis. |
11 | Pour les conversions de client à serveur, s'il se produit une troncation avec perte de données, une erreur est publiée. |
12 | Les secondes sont réinitialisées et les fractions de seconde sont ignorées. Aucune erreur de troncation n'est possible. |
N/A | Le comportement existant et antérieur de SQL Server 2005 (9.x) est conservé. |
Voir aussi
Améliorations des types de données de date et d’heure (OLE DB)
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour