Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Erro de importação usando Openrowset


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: