【问题标题】:Bulk insert with list of files批量插入文件列表
【发布时间】:2019-08-30 16:38:03
【问题描述】:

我创建了一个 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;

我希望将这些文件上的所有数据加载到表中。我该怎么做?

【问题讨论】:

标签: sql sql-server sql-server-2012


【解决方案1】:

您可以使用 while 循环,将值插入临时表并使用动态 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

【讨论】:

  • WHILEXISTS 不是有效的 T-SQL。我猜你的意思是WHILE EXISTS
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多