Importation CSV basée sur SQL Server
1) Les données du fichier CSV peuvent avoir
,
(virgule) entre (Ex :description), alors comment puis-je importer ces données ?
Solution
Si vous utilisez ,
(virgule) comme délimiteur, il n'y a aucun moyen de faire la différence entre une virgule comme terminateur de champ et une virgule dans vos données. J'utiliserais un autre FIELDTERMINATOR
comme ||
. Le code ressemblerait à cela et cela gèrerait parfaitement les virgules et les barres obliques simples.
2) Si le client crée le csv à partir d'Excel, les données contenant des virgules sont incluses dans
" ... "
(guillemets doubles) [comme dans l'exemple ci-dessous] alors comment l'importation peut-elle gérer cela ?
Solution
Si vous utilisez l'insertion BULK, il n'y a aucun moyen de gérer les guillemets doubles, les données seront insérées avec des guillemets doubles dans les lignes. Après avoir inséré les données dans le tableau, vous pouvez remplacer ces guillemets doubles par ' '.
update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
3) Comment pouvons-nous suivre si certaines lignes contiennent des données incorrectes, lesquelles sont ignorées ? (l'importation ignore-t-elle les lignes qui ne sont pas importables) ?
Solution
Pour gérer les lignes qui ne sont pas chargées dans la table en raison de données ou d'un format non valides, cela peut être géré à l'aide de la propriété ERRORFILE, spécifiez le nom du fichier d'erreur, il écrira l'erreur de rasage de lignes dans le fichier d'erreurs. le code devrait ressembler.
BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv',
TABLOCK
)