Bonjour,

Contexte :

Je dois migrer une base de données de SQLServer 2008 vers 2019. Il y a des programme en taches planifiées qui mettent à jours des référentiels dans la base à partir de fichiers CSV. Ces programmes ont été écrite en C# avec spring et NHibernate et ont passé du framework 4.6.2 vers 4.8.1. Serveurs US. Et bien sur, ça fonctionnait avant.

Contraintes :

De temps, d'argent, de personnel, comme d'hab, mais en pire pour certaines raisons.

Problème :

La mise à jours des référentiels plante sur les DateTime avec des fonction d'import de masse.

Il y a des requêtes type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
INSERT INTO IMP_XXX SELECT * FROM  OPENROWSET(BULK 'D:\Applications\Dev\YYYY\Fichiers_recus\REF_XXX_20230420_043354.CSV', FORMATFILE = 'D:\Applications\Dev\YYYY\Import_Chene\BcpFormat\IMP_XXX.xml')
.

Le format Dates dans les fichiers CSV est JJ/MM/AA.

Les fichiers BCP ressemblent à ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="French_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="French_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="French_CI_AS"/>
  <FIELD ID="5" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="French_CI_AS"/>
  <FIELD ID="6" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="100" COLLATION="French_CI_AS"/>
  <FIELD ID="7" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="50" COLLATION="French_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="2" NAME="BU_GL" xsi:type="SQLNVARCHAR"/> 
  <COLUMN SOURCE="3" NAME="CODE" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="DATE_EFFET" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="5" NAME="STATUT" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="6" NAME="DESCRIPTION" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="7" NAME="DESCRIPTION_COURTE" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>
L'erreur est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
System.Data.SqlClient.SqlException (0x80131904): The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
J'ai vérifié/changé les paramètres régionaux de Windows (Français, format date, etc), Le langage par defaut, la langue de collation de SQL Server plus teste pas mal de choses glanées sur Internet, j'ai toujours cette erreur. Le format date pour toutes les session est DMY.

Si je change le type de SQLNVCHAR vers SQLDATE dans les fichier BCP, j'ai les erreurs suivantes dés que le jour est supérieur à 12 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Bulk load data conversion error (type mismatch or invalid character for the specified codepage).
Y'a t-il une solution rapide ?

Cordialement,

Hervé.