Importação CSV do SQL Server baseada
1) Os dados do arquivo CSV podem ter,
(vírgula) no meio (Ex:description), então como posso fazer a importação manipulando esses dados?
Solução
Se você estiver usando
,
(vírgula) como delimitador, não há como diferenciar entre uma vírgula como terminador de campo e uma vírgula em seus dados. Eu usaria um FIELDTERMINATOR
diferente como ||
. O código se pareceria e isso lidará com vírgula e barra simples perfeitamente.
2) Se o cliente criar o csv a partir do excel, os dados que possuem vírgula serão incluídos dentro de" ... "
(aspas duplas) [como o exemplo abaixo] então como a importação pode lidar com isso?
Solução
Se você estiver usando BULK insert, não há como lidar com aspas duplas, os dados serão inseridos com aspas duplas nas linhas. Depois de inserir os dados na tabela, você pode substituir essas aspas duplas por '
'. update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
3) Como rastreamos se algumas linhas têm dados incorretos, qual importação pula? (a importação pula linhas que não são importáveis)?
Solução
Para lidar com linhas que não são carregadas na tabela por causa de dados ou formato inválidos, pode ser manipulado usando a propriedade ERRORFILE, especifique o nome do arquivo de erro, ele gravará o erro de corte de linha no arquivo de erro. código deve ser parecido.
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
)