Ik moet csv files importeren in SQL server. Om de een of andere reden heb ik daar altijd ruzie mee. Ogenschijnlijk zijn de T-sql instructies daarvoor niet zo complex, maar bij mij wil het nooit zo maar werken.
Dit is de CSV file die ik moet importeren:
17 kolommen (factuurdata)
DIt is de formatfile:
Helaas krijg ik deze foutmelding:
Msg 4823, Level 16, State 1, Line 87
Cannot bulk load. Invalid column number in the format file "D:\Data\csv_file_import_set.fmt"
Ik heb de kolommen in de code en de formatfile geknipt/geplakt om fouten te voorkomen, ik heb ze genummerd om telfouten te voorkomen, maar ik blijf deze fout krijgen.
Als ik de CSV file in Visual Studio Code open dan zie ik UTF-8 en LF aangegeven staan, dus volgens mij is "\n" correct als line terminator. "\r\n" werkt iig ook niet.
Ik heb het idee dat de fout iets anders is maar de melding verkeerd?
Al tientallen pagina's bekeken, videoinstructies op youtube, ChatGPT geraadpleegd. Ik kom er niet uit.
Vervolgens dit gemaakt (CSV, formatfile en TSQL) als testsetup
maar dezelfde foutmelding. Iemand een idee wat ik verkeerd doe? Ik kijk vast over iets heel stoms heen.
Dit is de CSV file die ik moet importeren:
code:
1
2
| ExportDate;AdminNo;RelNo;InvoiceNo;ItemType;InternalNmbr;InvoiceDate;InvoiceDueDate;DaysTerm;Description;CurrencyCode;OriginalAmount;PaidAmount;OpenAmount;VATAmount;VatPercentage;BaseCurrencyCode;BaseOriginalAmount;BaseOpenAmount;BaseVatAmount;Factor "2023-12-08 23:30:54";"BLABLA";"477180186";"13723FACLI1205632";"VENTE";"";"2023-12-08";"2024-02-06";"60";"";"EUR";"66271.36";"0.0";"66271.36";"";"";"EUR";"66271.36";"66271.36";"0";"1" |
17 kolommen (factuurdata)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| IF OBJECT_ID('TEMPDB..#StagingTableDebtors') IS NOT NULL DROP TABLE #StagingTableDebtors; CREATE TABLE #StagingTableDebtors ( ExportDate nvarchar(100) NULL, --1 AdminNo nvarchar(100) NULL, --2 RelNo nvarchar(100) NULL, --3 CompanyName nvarchar(100) NULL, --4 Street nvarchar(300) NULL, --5 Street_2 nvarchar(300) NULL, --6 Street_3 nvarchar(300) NULL, --7 Zipcode nvarchar(50) NULL, --8 City nvarchar(50) NULL, --9 CountryCode nvarchar(2) NULL, --10 PostalStreet nvarchar(300) NULL, --11 PostalStreet_2 nvarchar(300) NULL, --12 PostalStreet_3 nvarchar(300) NULL, --13 PostalZipCode nvarchar(50) NULL, --14 PostalCity nvarchar(50) NULL, --15 PostalCountryCode nvarchar(2) NULL, --16 CreditorAmount nvarchar(100) NULL --17 --decimal(15, 2) NOT NULL ); INSERT INTO #StagingTableDebtors SELECT * FROM OPENROWSET( BULK 'D:\Data\TST\BLABLA\out_Customers_20231208.csv', FORMATFILE = 'D:\Data\DBasics\csv_file_import_set.fmt', FIRSTROW = 2 ) AS Data; |
DIt is de formatfile:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 14.0 17 1 SQLCHAR 0 100 ";" 1 ExportDate 2 SQLCHAR 0 100 ";" 2 AdminNo 3 SQLCHAR 0 100 ";" 3 RelNo 4 SQLCHAR 0 100 ";" 4 CompanyName 5 SQLCHAR 0 300 ";" 5 Street 6 SQLCHAR 0 300 ";" 6 Street_2 7 SQLCHAR 0 300 ";" 7 Street_3 8 SQLCHAR 0 50 ";" 8 Zipcode 9 SQLCHAR 0 50 ";" 9 City 10 SQLCHAR 0 2 ";" 10 CountryCode 11 SQLCHAR 0 300 ";" 11 PostalStreet 12 SQLCHAR 0 300 ";" 12 PostalStreet_2 13 SQLCHAR 0 300 ";" 13 PostalStreet_3 14 SQLCHAR 0 50 ";" 14 PostalZipCode 15 SQLCHAR 0 50 ";" 15 PostalCity 16 SQLCHAR 0 2 ";" 16 PostalCountryCode 17 SQLCHAR 0 100 "\n" 17 CreditorAmount |
Helaas krijg ik deze foutmelding:
Msg 4823, Level 16, State 1, Line 87
Cannot bulk load. Invalid column number in the format file "D:\Data\csv_file_import_set.fmt"
Ik heb de kolommen in de code en de formatfile geknipt/geplakt om fouten te voorkomen, ik heb ze genummerd om telfouten te voorkomen, maar ik blijf deze fout krijgen.
Als ik de CSV file in Visual Studio Code open dan zie ik UTF-8 en LF aangegeven staan, dus volgens mij is "\n" correct als line terminator. "\r\n" werkt iig ook niet.
Ik heb het idee dat de fout iets anders is maar de melding verkeerd?
Al tientallen pagina's bekeken, videoinstructies op youtube, ChatGPT geraadpleegd. Ik kom er niet uit.
Vervolgens dit gemaakt (CSV, formatfile en TSQL) als testsetup
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| ExportDate;Column2 "bla";"test" "bla2";"test2" 14.0 2 1 SQLCHAR 0 100 ";" 1 ExportDate 2 SQLCHAR 0 100 "\n" 2 Column2 IF OBJECT_ID('TEMPDB..#StagingTableDebtors') IS NOT NULL DROP TABLE #StagingTableDebtors; CREATE TABLE #StagingTableDebtors ( ExportDate nvarchar(100) NULL, --1 Column2 nvarchar(100) NULL, ); INSERT INTO #StagingTableDebtors SELECT * FROM OPENROWSET( BULK 'C:\temp\test.csv', FORMATFILE = 'C:\temp\test.fmt', FIRSTROW = 2 ) AS Data; |
maar dezelfde foutmelding. Iemand een idee wat ik verkeerd doe? Ik kijk vast over iets heel stoms heen.
[ Voor 3% gewijzigd door Stefke op 10-12-2023 13:34 ]