Импортировать все, кроме последних трех строк файла CSV в таблицу SQL - PullRequest
0 голосов
/ 03 октября 2019

У меня есть файл CSV, созданный другим процессом (который я не могу изменить), который включает отметку времени и имя пользователя в строке под данными. Мне нужно импортировать данные без последней строки, потому что это вызывает ошибку из-за того, что это недопустимое значение столбца.

Если я удалю эту строку вручную (чего я хочу избежать), мой SQL может успешно импортироватьиспользуя данные:

BULK INSERT #TempReport
FROM 'D:\ac2000\Reg.csv'
WITH
(
FORMAT = 'CSV', 
FIRSTROW = 2, -- second row so skip header row in csv file
FIELDTERMINATOR = ',',  --CSV field delimiter
FIELDQUOTE = '"', -- Double quote mark is a text delimiter
ROWTERMINATOR = '\n'
)

Я знаю, что есть также опция LASTROW в Bulk Insert, но CVS будет каждый раз иметь разное количество строк, поэтому мне нужен способ для вычисления количества строк, не импортируя его! ... или, по крайней мере, не импортировать его описанным выше способом, что приводит только к другой ошибке.

1 Ответ

1 голос
/ 03 октября 2019

Вы можете READ файл CSV без импорта.

SELECT *
FROM OPENROWSET (
    BULK N'd:\temp\data.csv',
    FORMATFILE = 'D:\temp\fmt.fmt',
    FIRSTROW=2
) j

Например,

data.csv

ID, User
1,User1
10,User 10
11,User 11
2,user2

Формат файла

13.0
2
1       SQLCHAR 0       2       ","         1     PersonID               ""
2       SQLCHAR 0       25      "\r\n"      2     FirstName              SQL_Latin1_General_CP1_CI_AS

Вы можете использовать .fmt или .xml и сгенерировать его, используя bcp.

Вы можете прочитать большео файле формата и о том, как его сгенерировать, перейдя по ссылкам ниже.
NON файл формата xml
Файл формата XML
Создать файл формата

А вот документация о OPENROWSET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...