A causa do problema é o provedor Oledb
Ao importar arquivo csv ou arquivos excel com coluna de tipos de dados mistos, ele substituirá tipos não dominantes por
null
. (Usando Oledb ou Ace.Oledb ) Soluções alternativas
Você pode fazer alguma solução alternativa adicionando uma primeira linha que contém valores de string e removendo-a após a conclusão da impressão
ID,A,B,C
0,a,a,a
1,12,hh,i
2,ab12,tt,b
3,2,aa,o
4,bc12,ee,l
E ele corrigirá o problema se estiver usando
IMEX=1
Isso lerá as colunas como string e a coluna de ID como número. (0 é usado)
Ou adicione
HDR=NO
propriedade para string de conexão para que o cabeçalho seja a primeira linha importada (todos os seus valores são strings) Leia mais sobre tipos de dados mistos neste artigo
Outros métodos
Ou tente conseguir isso sem o provedor aceoledb, apenas importe o arquivo csv de outra maneira, como a seguir:
Usando o driver de texto da Microsoft
SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv')
Usando INSERÇÃO EM MASSA
CREATE TABLE dbo.MyTable
(ID INTEGER,
A VARCHAR(50),
B VARCHAR(50),
C VARCHAR(50)
)
BULK INSERT dbo.MyTable
FROM 'C:\abc.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
Outros detalhes nestes artigos:
- Como importar arquivo csv com OPENROWSET?
- T-SQL – Lê arquivos CSV usando OpenRowSet (Um tutorial detalhado)