Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Błąd importu przy użyciu Openrowset

Przyczyną problemu jest dostawca Oledb

Podczas importowania pliku csv lub plików excel z kolumną mieszanych typów danych zastąpi typy niedominujące przez null . (Korzystanie z Oledb lub Ace.Oledb )

Obejścia

Możesz obejść ten problem, dodając pierwszy wiersz zawierający wartości ciągu, a następnie usuwając go po zakończeniu importowania

ID,A,B,C
0,a,a,a
1,12,hh,i
2,ab12,tt,b
3,2,aa,o
4,bc12,ee,l

I rozwiąże problem, jeśli użyjesz IMEX=1

To odczyta kolumny jako ciąg, a kolumnę ID jako liczbę. (0 jest używane)

Lub dodaj HDR=NO właściwość do ciągu połączenia, więc nagłówek jest pierwszym importowanym wierszem (wszystkie jego wartości są ciągami)

Przeczytaj więcej o mieszanych typach danych w tym artykuł

Inne metody

Lub spróbuj to osiągnąć bez dostawcy aceoledb, po prostu zaimportuj plik csv w inny sposób, jak poniżej:

Korzystanie ze sterownika Microsoft Text

SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv')

Korzystanie z BULK INSERT

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' 
  )

Inne szczegóły w tych artykułach:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy Count(*) może kiedykolwiek zwrócić wartość null?

  2. Utrzymywanie kolumny obliczonej daty i godziny w SQL Server 2005

  3. Zaktualizowałem sterownik ODBC programu SQL Server i negatywnie wpłynęło to na wydajność. Co mogę zrobić?

  4. Jak wstawić do tabeli z tylko jedną kolumną IDENTITY?

  5. Utwórz wyzwalacz, który wstawia wartości do nowej tabeli po zaktualizowaniu kolumny