Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
28.02.2018, 09:02
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
Привет, есть 1000 файлов .csv, которые нужно загрузить в таблицу. как заюзать xp_cmdshell или что-то другое чтобы, не прописывать 1000 раз путь к файлам ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 09:10
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
Например выгрузите во временную таблицу названия ваших файлов и потом подставляйте их названия в динамический запрос в цикле Create table #t (file_name varchar(max)) INSERT #t EXEC xp_cmdshell 'dir /b "C:\*.CSV'; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 09:29
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 09:33
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
Вам же уже ответили. assmskНапример выгрузите во временную таблицу названия ваших файлов и потом подставляйте их названия в динамический запрос в цикле Create table #t (file_name varchar(max)) INSERT #t EXEC xp_cmdshell 'dir /b "C:\*.CSV'; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 09:48
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
Надеюсь поймете идею 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 09:56
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
Спасибо большое, сейчас буду изучать. а так не получится ? пока ошибка 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); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 10:48
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
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 );'. у меня подозрения, что чему-то не хватает длины строки, но не понимаю чему... Мб кто видит причину ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 10:52
|
|||
|---|---|---|---|
bulk insert в цикле |
|||
|
#18+
svanrus, а что ваша таблица @tf должна быть видна в EXEC()??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 10:54
|
|||
|---|---|---|---|
bulk insert в цикле |
|||
|
#18+
с каывычками у вас бред какой-то как то так наверное автор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 );' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 10:57
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
Код: sql 1. Зато не курсор! Рукалицоплескаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 10:59
|
|||
|---|---|---|---|
bulk insert в цикле |
|||
|
#18+
Мне кажется так правильнее: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 11:12
|
|||
|---|---|---|---|
bulk insert в цикле |
|||
|
#18+
Kopelly, иможно и так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 11:15
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
TaPaKKopelly, иможно и так почти получилось! осталось правильно кавычки расставить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 11:19
|
|||
|---|---|---|---|
bulk insert в цикле |
|||
|
#18+
Руслан ДамировичTaPaKKopelly, иможно и так почти получилось! осталось правильно кавычки расставить... развлекайтесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 11:31
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
Svanrus, если проблемы сформированием динамического запроса сначала поставьте print вместо exec, чтобы наглядно понять в каком месте у вас ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 11:42
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 11:43
|
|||
|---|---|---|---|
bulk insert в цикле |
|||
|
#18+
Руслан Дамирович, fail, пилите дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 12:37
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
спасибо всем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.02.2018, 12:56
|
|||
|---|---|---|---|
|
|||
bulk insert в цикле |
|||
|
#18+
svanrus, если научитесь работать с Integration Services подобные задачи не будут вызывать никаких проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&mobile=1&tid=1690194]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
3ms |
| others: | 210ms |
| total: | 327ms |

| 0 / 0 |
