powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / bulk insert в цикле
20 сообщений из 20, страница 1 из 1
bulk insert в цикле
    #39608277
svanrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет,

есть 1000 файлов .csv, которые нужно загрузить в таблицу.
как заюзать xp_cmdshell или что-то другое чтобы, не прописывать 1000 раз путь к файлам ?
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608280
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например выгрузите во временную таблицу названия ваших файлов и потом подставляйте их названия в динамический запрос в цикле

Create table #t (file_name varchar(max))
INSERT #t
EXEC xp_cmdshell 'dir /b "C:\*.CSV';
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608292
svanrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
assmsk,

спасибо за совет, но больше не проблема как выгрузить этот список в табличку, а как сам курсор c bulk-ом написать.

Как вместо @ подставить этот список ?

BULK INSERT #t_vasya
FROM 'C:\cur_bulk_280218\@' -- менять по необходимости
WITH
(
firstrow = 2,
MAXERRORS = 0,
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n',
DATAFILETYPE='widechar',
CODEPAGE = 'ACP'
);
go
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608294
Кусочек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вам же уже ответили.

assmskНапример выгрузите во временную таблицу названия ваших файлов и потом подставляйте их названия в динамический запрос в цикле

Create table #t (file_name varchar(max))
INSERT #t
EXEC xp_cmdshell 'dir /b "C:\*.CSV';
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608301
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надеюсь поймете идею



Declare @t table (nn int identity,file_name varchar(max))
Declare @i int = 1
Declare @strSQL varchar(max)

INSERT @t
EXEC xp_cmdshell 'dir /b "C:\cur_bulk_280218\*.CSV';

While @i <= (Select max(nn) from @t)
begin

Set @strSQL = 'BULK INSERT #' + (Select file_name from @t where nn = @i) +
'FROM 'C:\cur_bulk_280218\' + (Select file_name from @t where nn = @i) +
' WITH
(
firstrow = 2,
MAXERRORS = 0,
FIELDTERMINATOR = ''\t'',
ROWTERMINATOR = ''\n'',
DATAFILETYPE=''widechar'',
CODEPAGE = ''ACP''
);'


exec(@strSQL)

Set @i = @i + 1
end
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608304
svanrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое, сейчас буду изучать.

а так не получится ?

пока ошибка
Msg 4860, Level 16, State 1, Line 1
Cannot bulk load. The file "+@a+" does not exist.

в файле лежат пути к 1000 файлам.

DECLARE @a VARCHAR(50);
SET @a='C:\2.txt'
DECLARE @b VARCHAR(500);
SET @b='BULK INSERT t_konkud_test_bulk
FROM ''+@a+''
WITH
(MAXERRORS = 0,
FIELDTERMINATOR = ''\t'',
ROWTERMINATOR = ''\n'',
DATAFILETYPE=''widechar'',
CODEPAGE = ''ACP'') '
exec(@b);
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608338
svanrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
assmsk,


Declare @tf table (nn int identity,file_name varchar(max))
Declare @i int = 1
Declare @strSQL varchar(max)

--drop table #t1
insert into @tf
exec master.dbo.xp_cmdshell 'dir /b C:\work_ne_trogat /O:E'

--select * from @tf
--Select file_name from @tf
While @i <= (Select max(nn) from @tf)


begin

Set @strSQL = 'BULK INSERT t_vasya' + (Select file_name from @tf where nn = @i) +
'FROM ''C:\work_ne_trogat\'' + (Select file_name from @tf where nn = @i) +
'' WITH
(
firstrow = 1
,FIELDTERMINATOR = '';''
,ROWTERMINATOR = ''\n''
,tablock
);'


exec(@strSQL)

Set @i = @i + 1
end



вроде уже близок , но пока вылазит море однотипных ошибок



Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'января'.
Msg 1087, Level 15, State 2, Line 1
Must declare the table variable "@tf".
Msg 105, Level 15, State 1, Line 6
Unclosed quotation mark after the character string '
,tablock
);'.


у меня подозрения, что чему-то не хватает длины строки, но не понимаю чему... Мб кто видит причину ?
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608341
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svanrus,

а что ваша таблица @tf должна быть видна в EXEC()???
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608343
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с каывычками у вас бред какой-то
как то так наверное
авторSet @strSQL =
'BULK INSERT t_vasya' + (Select file_name from @tf where nn = @i) +
'FROM ''C:\work_ne_trogat\''' + (Select file_name from @tf where nn = @i) +
' WITH
(
firstrow = 1
,FIELDTERMINATOR = '';''
,ROWTERMINATOR = ''\n''
,tablock
);'
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608344
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
While @i <= (Select max(nn) from @tf)


Зато не курсор! Рукалицоплескаю.
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608346
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется так правильнее:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Set @strSQL = 
'BULK INSERT t_vasya' + (Select replace(file_name,' ','') from @tf where nn = @i) +
' FROM ''C:\work_ne_trogat\' + (Select file_name from @tf where nn = @i) + 
''' WITH
(
firstrow = 1
,FIELDTERMINATOR = '';''
,ROWTERMINATOR = ''\n''
,tablock
);'
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608353
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kopelly,
иможно и так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Declare @t table (nn int identity,file_name varchar(max))
Declare @i int = 1 
Declare @strSQL varchar(max)

INSERT @t
EXEC xp_cmdshell 'dir /b "e:\*.CSV';

SELECT @strSQL = ISNULL(@strSQL,'') + 
	'BULK INSERT #' + [file_name] + ' FROM ''C:\cur_bulk_280218\''' + [file_name] +
	' WITH
	(
	firstrow = 2,
	MAXERRORS = 0,
	FIELDTERMINATOR = ''\t'',
	ROWTERMINATOR = ''\n'',
	DATAFILETYPE=''widechar'',
	CODEPAGE = ''ACP''
	);' + CHAR(13)
FROM @t
WHERE [file_name] IS NOT NULL

EXEC (@strSQL)
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608354
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKKopelly,
иможно и так

почти получилось! осталось правильно кавычки расставить...
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608357
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан ДамировичTaPaKKopelly,
иможно и так

почти получилось! осталось правильно кавычки расставить...
развлекайтесь
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608363
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Svanrus, если проблемы сформированием динамического запроса сначала поставьте print вместо exec, чтобы наглядно понять в каком месте у вас ошибка
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608371
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKразвлекайтесь
Угу (с) после сборки доработать напильником...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
DECLARE @t TABLE ( [nn] INT IDENTITY(1,1), [filename] VARCHAR(MAX) )
DECLARE @tSQL NVARCHAR(MAX) = N''

INSERT @t ( [filename] )
EXEC xp_cmdshell 'dir /b "C:\cur_bulk_280218\*.csv"';

SELECT @tSQL += 
  N'BULK INSERT
    ' + QUOTENAME( 't_vasya_' + @filename ) + N'
  FROM
    ' + QUOTENAME( 'C:\cur_bulk_280218\' + @filename, '''' ) + N'
	WITH (
	  FIRSTROW        = 2,
	  MAXERRORS       = 0,
	  FIELDTERMINATOR = ''\t'',
	  ROWTERMINATOR   = ''\n'',
	  DATAFILETYPE    = ''WIDECHAR'',
	  CODEPAGE        = ''ACP''
	);' + CHAR(13)
FROM @t
WHERE [file_name] IS NOT NULL

EXECUTE sp_executesql @tSQL
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608373
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамирович,

fail, пилите дальше
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608403
svanrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо всем!
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608426
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svanrus,

если научитесь работать с Integration Services подобные задачи не будут вызывать никаких проблем.
...
Рейтинг: 0 / 0
bulk insert в цикле
    #39608924
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовsvanrus,

если научитесь работать с Integration Services подобные задачи не будут вызывать никаких проблем.
нах еото ужос powershell наше все
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / bulk insert в цикле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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