Массовая вставка со списком файлов - PullRequest
0 голосов
/ 09 апреля 2019

Я создаю процедуру SQL для импорта данных из txt файла.Однако есть много файлов (около 80 файлов), и я не могу перечислить его имя.Его имя отформатировано как «DATA_XXXXXXX.TXT»

DECLARE @sql1 nvarchar(max) = N'BULK INSERT dbo.Student FROM '''
  + 'D:\NEW_FOLDER\DATA_20190222'
  + '.TXT'
  + ''' WITH 
     (
       FIELDTERMINATOR = ''|'',
       MAXERRORS = 10000
     );';

EXEC sys.sp_executesql @sql1;

Я хочу, чтобы все данные из этого файла были загружены в таблицу.Как я могу это сделать?

1 Ответ

1 голос
/ 09 апреля 2019

Вы можете сделать это с помощью цикла while, вставить значения в temptable и увеличить переменную имени файла с помощью динамического SQL:

CREATE TABLE #TEMP_FILENAMES
(
FILENAME VARCHAR(50)
)

INSERT INTO #TEMP_FILENAMES
VALUES('20190222')

INSERT INTO #TEMP_FILENAMES
VALUES('20190223')

DECLARE INT @YEARMMDD
WHILE EXISTS(SELECT * FROM #TEMP_FILENAMES)

BEGIN
SET @YEARMMDD = (SELECT TOP 1 FILENAME FROM #TEMP_FILENAMES)

DECLARE @sql1 nvarchar(max) = N'BULK INSERT dbo.Student FROM '''
  + 'D:\NEW_FOLDER\DATA_' + @YEARMMDD 
  + '.TXT'
  + ''' WITH 
     (
       FIELDTERMINATOR = ''|'',
       MAXERRORS = 10000
     );';

EXEC sys.sp_executesql @sql1;

DELETE FROM #TEMP_FILENAMES WHERE FILENAME = @YEARMMDD 

END
...