powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Массовый импорт CSV в SQL
23 сообщений из 23, страница 1 из 1
Массовый импорт CSV в SQL
    #40045743
Snegovik1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Пробую свои шаги в освоении MS SQL.
И встала задача такого плана: имеем несколько файлов CSV и их надо импортировать в таблицу (таблицу временную)
Притом как импортировать по одному файлу я разобрался, а как разом из каталога все файлы с разрешением CSV обработать у меня не получается. Притом что надо использовать курсор. Я в интернете нашел скрипт и пытался его под себя адаптировать но у меня ничего не вышло. Может поможете новичку? ))
Мой запрос такой :

Код: sql
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
IF (OBJECT_ID('tempdb..#csv_temp') IS NOT NULL) DROP TABLE #csv_temp;
-- Создаю временную таблицу #csv_temp
CREATE TABLE #csv_temp (
              [Times] VARCHAR(100),
	        [Caller_Name] VARCHAR (200),
			[Caller_Number] VARCHAR (200),
			[Callee_Name] VARCHAR (200),
			[Callee_Numbers] VARCHAR(100),
			[DOD] VARCHAR(100),
			[DID] VARCHAR(100),
			[Call_Duration_(s)] VARCHAR (200),
			[Talk_Duration_(s)] VARCHAR (200),
			[Status] VARCHAR(100),
			[Source_Trunk] VARCHAR(50),
			[Destination Trunk] VARCHAR(100),
			[Communication_Type] VARCHAR(100),
			[PIN_Code] VARCHAR(10),
			[Caller IP Address] VARCHAR(200),
			[Cost] VARCHAR(100),
			[Billing_Account] VARCHAR(100)
			
)
-- Импортировать во временную таблицу информацию из файла csv

-- BULK INSERT #csv_temp
-- FROM 'C:\serg\all.csv'
-- WITH (firstrow = 2,fieldterminator = ';', rowterminator = '0x0a',CODEPAGE = '1251');
-- переменные 
declare @filename varchar(255),
        @path     varchar(255),
        @sql      varchar(8000),
		@filename varchar(255)
--получить список файлов для обработки:
SET @path = 'C:\serg\'

--цикл курсора
declare c1 CURSOR LOCAL  READ_ONLY  FAST_FORWARD  FOR
 SELECT TIMES,Caller_Name FROM @filename where  [Times]  like '%.csv%'
open c1
fetch next from c1 into @path,@filename
While @@fetch_status <> -1
  begin
  --bulk insert won't take a variable name, so make a sql and execute it instead:
   set @sql = 'BULK INSERT #csv_temp FROM ''' + @path + @filename + ''' '
       + '     WITH ( 
               FIELDTERMINATOR = '','', 
               ROWTERMINATOR = ''\n'', 
               FIRSTROW = 2 
            ) '
print @sql
exec (@sql)

  fetch next from c1 into @path,@filename
  end
close c1
deallocate c1



select * from #csv_temp
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40045745
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Snegovik1987,

для получения списка файлов и загрузки можно использовать такую обертку (выбираются все файлы .log из папки c:\temp).

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
set nocount on;

declare @files table (subdir varchar(255),dep smallint,isfile smallint)
declare @filename varchar(255) 
declare @path varchar(255) = 'c:\temp'

insert into @files (subdir,dep,isfile)
exec xp_dirtree @path,1,1

delete @files where subdir not like '%.log'
--select * from @files 

while exists (select top 1 1 from @files)
begin
	select top 1 @filename=subdir from @files 

	/*import file*/
	print 'Import file: '+ @path+'\'+@filename  

	delete @files where subdir=@filename 
	set @filename=''
end 

...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40045750
Snegovik1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,

Предварительно я создаю временную таблицу (т.к. у меня ее нет)
Командами :
IF (OBJECT_ID('tempdb..#csv_temp') IS NOT NULL) DROP TABLE #csv_temp;
-- Создаю временную таблицу #csv_temp
CREATE TABLE #csv_temp (
[Times] VARCHAR(100),
[Caller_Name] VARCHAR (200),
[Caller_Number] VARCHAR (200),
[Callee_Name] VARCHAR (200),
[Callee_Numbers] VARCHAR(100),
[DOD] VARCHAR(100),
[DID] VARCHAR(100),
[Call_Duration_(s)] VARCHAR (200),
[Talk_Duration_(s)] VARCHAR (200),
[Status] VARCHAR(100),
[Source_Trunk] VARCHAR(50),
[Destination Trunk] VARCHAR(100),
[Communication_Type] VARCHAR(100),
[PIN_Code] VARCHAR(10),
[Caller IP Address] VARCHAR(200),
[Cost] VARCHAR(100),
[Billing_Account] VARCHAR(100)
И далее использую эту обертку которую вы предложили?
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40045759
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Snegovik1987,

да, сначала создаёте таблицу
в обертку вставляете блок с bulk insert (set @sql ... exec (@sql)) после/вместо print-а

полагаю, что:
- файлы csv однотипные,
- права на запуск sp_dirtree у вас есть,
- у учетки сиквела есть доступ в папку с файлами
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40045764
Snegovik1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad
Snegovik1987,

да, сначала создаёте таблицу
в обертку вставляете блок с bulk insert (set @sql ... exec (@sql)) после/вместо print-а

полагаю, что:
- файлы csv однотипные,
- права на запуск sp_dirtree у вас есть,
- у учетки сиквела есть доступ в папку с файлами

Да файлы однотипные в остальном вроде все так.
А скажите обязательно использовать курсор?В вашем примере его нет а в целом?

Посмотрите пожалуйста - вот так :


IF (OBJECT_ID('tempdb..#csv_temp') IS NOT NULL) DROP TABLE #csv_temp;
-- Создаю временную таблицу #csv_temp
CREATE TABLE #csv_temp (
[Times] VARCHAR(100),
[Caller_Name] VARCHAR (200),
[Caller_Number] VARCHAR (200),
[Callee_Name] VARCHAR (200),
[Callee_Numbers] VARCHAR(100),
[DOD] VARCHAR(100),
[DID] VARCHAR(100),
[Call_Duration_(s)] VARCHAR (200),
[Talk_Duration_(s)] VARCHAR (200),
[Status] VARCHAR(100),
[Source_Trunk] VARCHAR(50),
[Destination Trunk] VARCHAR(100),
[Communication_Type] VARCHAR(100),
[PIN_Code] VARCHAR(10),
[Caller IP Address] VARCHAR(200),
[Cost] VARCHAR(100),
[Billing_Account] VARCHAR(100)

)

set nocount off;

declare @files table (Times varchar(255), Caller_Name VARCHAR (200),Caller_Number VARCHAR (200))
declare @filename varchar(255)
declare @path varchar(255) = 'c:\serg'

insert into @files (TImes,Caller_Name,Caller_Number)
exec xp_dirtree @path,1,1

delete @files where Times not like '%.csv'
--select * from @files

while exists (select top 1 1 from @files)
begin
select top 1 @filename=Times from @files

/*import file*/
--print 'Import file: '+ @path+'\'+@filename
bulk insert (set @sql ... exec (@sql))

delete @files where Times=@filename
set @filename=''
end
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40045780
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Snegovik1987

А скажите обязательно использовать курсор?В вашем примере его нет а в целом?

"А скрипач не нужен, родной. Он только лишнее топливо жрёт." (с) классика
в данном случае, вместо курсора используется цикл

как-то так
Код: sql
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.
set nocount off;

declare @files table ([filename] varchar(255), sub smallint, isfile smallint)
declare @sql varchar(2048)
declare @filename varchar(255) 
declare @path varchar(255) = 'c:\serg'


insert into @files ([filename],sub,isfile)
exec xp_dirtree @path,1,1

delete @files where [filename] not like '%.csv' 
--select * from @files 

while exists (select top 1 1 from @files)
begin
	select top 1 @filename=filename from @files 

	/*import file*/
	--print 'Import file: '+ @path+'\'+@filename  

	set @sql = 'BULK INSERT #csv_temp FROM ''' + @path +'\'+ @filename + ''' WITH (FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'', FIRSTROW = 2 ) '
	print @sql
	exec (@sql)

	delete @files where [filename]=@filename 
	set @filename=''
end

...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40045798
Snegovik1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad
Snegovik1987

А скажите обязательно использовать курсор?В вашем примере его нет а в целом?

"А скрипач не нужен, родной. Он только лишнее топливо жрёт." (с) классика
в данном случае, вместо курсора используется цикл

как-то так
Код: sql
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.
set nocount off;

declare @files table ([filename] varchar(255), sub smallint, isfile smallint)
declare @sql varchar(2048)
declare @filename varchar(255) 
declare @path varchar(255) = 'c:\serg'


insert into @files ([filename],sub,isfile)
exec xp_dirtree @path,1,1

delete @files where [filename] not like '%.csv' 
--select * from @files 

while exists (select top 1 1 from @files)
begin
	select top 1 @filename=filename from @files 

	/*import file*/
	--print 'Import file: '+ @path+'\'+@filename  

	set @sql = 'BULK INSERT #csv_temp FROM ''' + @path +'\'+ @filename + ''' WITH (FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'', FIRSTROW = 2 ) '
	print @sql
	exec (@sql)

	delete @files where [filename]=@filename 
	set @filename=''
end



Благодарю Вас!
Но в процессе запуска у меня ошибка выстреливает
Код: sql
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
 

IF (OBJECT_ID('tempdb..#csv_temp') IS NOT NULL) DROP TABLE #csv_temp;
-- Создаю временную таблицу #csv_temp
CREATE TABLE #csv_temp (
            [Times] VARCHAR(250),
	        [Caller_Name] VARCHAR (250),
			[Caller_Number] VARCHAR (250),
			[Callee_Name] VARCHAR (250),
			[Callee_Numbers] VARCHAR(250),
			[DOD] VARCHAR(250),
			[DID] VARCHAR(250),
			[Call_Duration_(s)] VARCHAR (200),
			[Talk_Duration_(s)] VARCHAR (200),
			[Status] VARCHAR(200),
			[Source_Trunk] VARCHAR(50),
			[Destination Trunk] VARCHAR(100),
			[Communication_Type] VARCHAR(100),
			[PIN_Code] VARCHAR(10),
			[Caller IP Address] VARCHAR(200),
			[Cost] VARCHAR(100),
			[Billing_Account] VARCHAR(100)
			
)

set nocount off;

declare @files table ([filename] varchar(255), sub smallint, isfile smallint)
declare @sql varchar(2048)
declare @filename varchar(255) 
declare @path varchar(255) = 'c:\serg'


insert into @files ([filename],sub,isfile)
exec xp_dirtree @path,1,1

delete @files where [filename] not like '%.csv' 
--select * from @files 

while exists (select top 1 1 from @files)
begin
	select top 1 @filename=filename from @files 

	/*import file*/
	--print 'Import file: '+ @path+'\'+@filename  

	set @sql = 'BULK INSERT #csv_temp FROM ''' + @path +'\'+ @filename + ''' WITH (FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'', FIRSTROW = 2 ) '
	print @sql
	exec (@sql)

	delete @files where [filename]=@filename 
	set @filename=''
end



Сообщение 4866, уровень 16, состояние 8, строка 1
Массовая загрузка не удалась. Слишком длинный столбец в файле данных в строке 1, столбце 1. Убедитесь, что признак конца поля и конца строки были указаны правильно.
Сообщение 7301, уровень 16, состояние 2, строка 1
Не удалось получить требуемый интерфейс ("IID_IColumnsInfo") от поставщика OLE DB "BULK" для связанного сервера "(null)".
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40045800
Snegovik1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Snegovik1987,
Файлы такие
во вложении
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40045805
Snegovik1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Snegovik1987,
Поставил
ROWTERMINATOR = ''0x0a'' и все получилось.
Я благодарен Вам!
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40045840
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Snegovik1987,

это, в общем-то, дедовский способ, для решения ETL задач можно использовать Integration Services. Намного удобнее, к тому же, самодокументируемо и Вы сможете выполнять несколько задач загрузки одновременно.
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40045992
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Snegovik1987,

это, в общем-то, дедовский способ, для решения ETL задач можно использовать Integration Services. Намного удобнее, к тому же, самодокументируемо и Вы сможете выполнять несколько задач загрузки одновременно.


Зато раз в десять быстрее и во стока же компактнее.
Ну и запустить десяток скриптов, если очень хочется, тоже нема проблем.
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40046039
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у человека нет потребностей в трансформации данных, нет вопросов по безопасности (доступ SQL Сервера к файловой системе) , не требуется более-менее осмысленной обработки ошибок... другими словами, если человеку надо сделать простую копипасту - проще использовать обычный SQL, чем ставить SSIS, VS, настраивать и деплоить. Если человек "пробует свои шаги", то зачем отягощать его проблемами уровня миддл и выше?
aleks222
Ну и запустить десяток скриптов, если очень хочется, тоже нема проблем.
В принципе оркестрацию можно делать и на SQL, но в реальной жизни я бы отнесся к такому предложению с негативным предубеждением.
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40046076
Snegovik1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.Евгений
Если у человека нет потребностей в трансформации данных, нет вопросов по безопасности (доступ SQL Сервера к файловой системе) , не требуется более-менее осмысленной обработки ошибок... другими словами, если человеку надо сделать простую копипасту - проще использовать обычный SQL, чем ставить SSIS, VS, настраивать и деплоить. Если человек "пробует свои шаги", то зачем отягощать его проблемами уровня миддл и выше?
aleks222
Ну и запустить десяток скриптов, если очень хочется, тоже нема проблем.
В принципе оркестрацию можно делать и на SQL, но в реальной жизни я бы отнесся к такому предложению с негативным предубеждением.


Да, все верно. Пробую свои силы.
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40048301
Snegovik1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad
Snegovik1987,

для получения списка файлов и загрузки можно использовать такую обертку (выбираются все файлы .log из папки c:\temp).

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
set nocount on;

declare @files table (subdir varchar(255),dep smallint,isfile smallint)
declare @filename varchar(255) 
declare @path varchar(255) = 'c:\temp'

insert into @files (subdir,dep,isfile)
exec xp_dirtree @path,1,1

delete @files where subdir not like '%.log'
--select * from @files 

while exists (select top 1 1 from @files)
begin
	select top 1 @filename=subdir from @files 

	/*import file*/
	print 'Import file: '+ @path+'\'+@filename  

	delete @files where subdir=@filename 
	set @filename=''
end 



Вы меня простите за занудство. А можете рассказать как работает этот цикл?
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40048316
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Snegovik1987


Вы меня простите за занудство. А можете рассказать как работает этот цикл?


буквально так, как там написано


теперь с комментами
Код: sql
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.
29.
set nocount on;
/*декларация переменных и рабочей таблицы*/
declare @files table (subdir varchar(255),dep smallint,isfile smallint)
declare @filename varchar(255) 
declare @path varchar(255) = 'c:\temp'

/*занесение списка файлов в таблицу*/
insert into @files (subdir,dep,isfile)
exec xp_dirtree @path,1,1

/*удаление лишнего*/
delete @files where subdir not like '%.log'
--select * from @files 

/*пока что-то (файлы) есть  в таблице*/
while exists (select top 1 1 from @files)
begin
	/*берется первый попавшийся файл из таблицы*/
	select top 1 @filename=subdir from @files 

	/*работа с файлом*/
	print 'Import file: '+ @path+'\'+@filename  

	/*удаление файла из таблицы*/
	delete @files where subdir=@filename 

	/*инициализация переменной*/
	set @filename=''
end 


...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40048323
Snegovik1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,
То есть логика такая :
Объявляем переменные и таблицы с которой будет работать.
Далее делаем занесение списка файлов в временную таблицу.
Потом delete @files where subdir not like '%.log' - удаляем лишнее а лишнее это лишние файлы или что именно?

Далее /*пока что-то (файлы) есть в таблице*/
while exists (select top 1 1 from @files) пока файл в таблице (я так понимаю пока один файл )
Добавляем его в таблицу и импортируем.
И цикл работает по кругу пока все файлы с определенным расширением не заберет в таблицу?

Скажите еще,у вас есть почта или другие каналы связи? У меня есть предложение.
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40048341
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Snegovik1987
komrad,
То есть логика такая :
1) Объявляем переменные и таблицы с которой будет работать.

2) Далее делаем занесение списка файлов в временную таблицу.

3) Потом delete @files where subdir not like '%.log' - удаляем лишнее а лишнее это лишние файлы или что именно?

в этом примере обрабатывались файлы с расширением log
поскольку в папке могут быть другие файлы, которые обрабатывать не надо, то удаляем все файлы с расширением отличным от log

Snegovik1987

4) Далее /*пока что-то (файлы) есть в таблице*/
while exists (select top 1 1 from @files) пока файл в таблице (я так понимаю пока один файл )

это проверка на наличие хотя бы одного (top 1) файла в таблице
если файлов в таблице нет, то цикл заканчивается

Snegovik1987

5) Добавляем его в таблицу и импортируем.
И цикл работает по кругу пока все файлы с определенным расширением не заберет в таблицу?

все файлы и так уже в таблице - см. п.2-3
в цикле берется один любой (нет сортировки к top 1) файл из таблицы и обрабатывается как нужно

Snegovik1987Скажите еще,у вас есть почта или другие каналы связи? У меня есть предложение.
почта в профиле
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40048369
Snegovik1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad
Snegovik1987
komrad,
То есть логика такая :
1) Объявляем переменные и таблицы с которой будет работать.

2) Далее делаем занесение списка файлов в временную таблицу.

3) Потом delete @files where subdir not like '%.log' - удаляем лишнее а лишнее это лишние файлы или что именно?

в этом примере обрабатывались файлы с расширением log
поскольку в папке могут быть другие файлы, которые обрабатывать не надо, то удаляем все файлы с расширением отличным от log

Snegovik1987

4) Далее /*пока что-то (файлы) есть в таблице*/
while exists (select top 1 1 from @files) пока файл в таблице (я так понимаю пока один файл )

это проверка на наличие хотя бы одного (top 1) файла в таблице
если файлов в таблице нет, то цикл заканчивается

Snegovik1987

5) Добавляем его в таблицу и импортируем.
И цикл работает по кругу пока все файлы с определенным расширением не заберет в таблицу?

все файлы и так уже в таблице - см. п.2-3
в цикле берется один любой (нет сортировки к top 1) файл из таблицы и обрабатывается как нужно

Snegovik1987Скажите еще,у вас есть почта или другие каналы связи? У меня есть предложение.

почта в профиле
Спасибо.
Я написал на почту.
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40134100
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пытаюсь загрузить файл, скуль не пишет ошибок, а только что затронуто 0 строк.
куда копать и на какую глубину - не понятно

создал таблицу:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE #ImportKBD_USD(
	[Date] [varchar](50) NULL,
	["1 Mo"] [varchar](50) NULL,
	["2 Mo"] [varchar](50) NULL,
	["3 Mo"] [varchar](50) NULL,
	["6 Mo"] [varchar](50) NULL,
	["1 Yr"] [varchar](50) NULL,
	["2 Yr"] [varchar](50) NULL,
	["3 Yr"] [varchar](50) NULL,
	["5 Yr"] [varchar](50) NULL,
	["7 Yr"] [varchar](50) NULL,
	["10 Yr"] [varchar](50) NULL,
	["20 Yr"] [varchar](50) NULL,
	["30 Yr"] [varchar](50) NULL
) 



импортирую:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BULK INSERT #ImportKBD_USD
FROM 'd:\ExportFile\App\kbd\daily-treasury-rates_2021.csv'
WITH
(
    FIELDQUOTE = '"',
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    TABLOCK
)



Файл во вложении... Где камни?
Подскажите, пожалуйста

Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
Sep 24 2019 13:48:23
Copyright (C) 2019 Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) (Hypervisor)


Спасибо
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40134106
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
пытаюсь загрузить файл, скуль не пишет ошибок, а только что затронуто 0 строк.
куда копать и на какую глубину - не понятно

создал таблицу:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE #ImportKBD_USD(
	[Date] [varchar](50) NULL,
	["1 Mo"] [varchar](50) NULL,
	["2 Mo"] [varchar](50) NULL,
	["3 Mo"] [varchar](50) NULL,
	["6 Mo"] [varchar](50) NULL,
	["1 Yr"] [varchar](50) NULL,
	["2 Yr"] [varchar](50) NULL,
	["3 Yr"] [varchar](50) NULL,
	["5 Yr"] [varchar](50) NULL,
	["7 Yr"] [varchar](50) NULL,
	["10 Yr"] [varchar](50) NULL,
	["20 Yr"] [varchar](50) NULL,
	["30 Yr"] [varchar](50) NULL
) 



импортирую:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BULK INSERT #ImportKBD_USD
FROM 'd:\ExportFile\App\kbd\daily-treasury-rates_2021.csv'
WITH
(
    FIELDQUOTE = '"',
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    TABLOCK
)



Файл во вложении... Где камни?
Подскажите, пожалуйста

Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
Sep 24 2019 13:48:23
Copyright (C) 2019 Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) (Hypervisor)


Спасибо


Добавь параметр ERRORFILE ='error_file_path', выполни команду еще раз и смотри что появилось в файле ошибок.
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40134134
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgen,

файл ошибок не создался
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40134149
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
пытаюсь загрузить файл, скуль не пишет ошибок, а только что затронуто 0 строк.
куда копать и на какую глубину - не понятно


у Вас не стандартный разделитель строк всего лишь символ 0A (символ перевода строки, как в файлах UNIX)
Код: plaintext
1.
2.
 Примечание

В соответствии с тем, как в Microsoft Windows обрабатываются текстовые файлы, (\n автоматически заменяется на \r\n) .
т.е надо просто было дочитать до конца примеры и сделать по аналогии

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare @sql varchar(max) = '
BULK INSERT #ImportKBD_USD
FROM ''d:\ExportFile\App\kbd\daily-treasury-rates_2021.csv''
WITH
(
    FIELDQUOTE = ''"'',
    FIRSTROW = 2,
    FIELDTERMINATOR = '','',
    ROWTERMINATOR = ''' + char(10) + ''',
    TABLOCK
)'

exec (@sql)
...
Рейтинг: 0 / 0
Массовый импорт CSV в SQL
    #40134155
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot,

спасибо огромное, получилось
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Массовый импорт CSV в SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]