首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将多个CSV文件导入SQL Server表?

如何将多个CSV文件导入SQL Server表?
EN

Stack Overflow用户
提问于 2020-05-21 22:32:32
回答 2查看 1.2K关注 0票数 0

我使用的是SQL server 2017版本,我想将多个.csv文件导入到SQL Server中的多个表中。

我在网上找到了下面的脚本,

代码语言:javascript
复制
--BULK INSERT MULTIPLE FILES From a Folder 

--a table to loop thru filenames drop table ALLFILENAMES
CREATE TABLE ALLFILENAMES(WHICHPATH VARCHAR(255),WHICHFILE varchar(255))

--some variables
declare @filename varchar(255),
        @path     varchar(255),
        @sql      varchar(8000),
        @cmd      varchar(1000)


--get the list of files to process:
SET @path = 'C:\Dump\'
SET @cmd = 'dir ' + @path + '*.csv /b'
INSERT INTO  ALLFILENAMES(WHICHFILE)
EXEC Master..xp_cmdShell @cmd
UPDATE ALLFILENAMES SET WHICHPATH = @path where WHICHPATH is null


--cursor loop
declare c1 cursor for SELECT WHICHPATH,WHICHFILE FROM ALLFILENAMES where WHICHFILE 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 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

但问题是我不能使用'EXEC Master..xp_cmdShell‘命令,因为出于某些安全原因,它已被数据库管理员禁用,而且他们不允许我使用它。在相同的脚本中,有没有替代'xp_cmdShell‘的命令?

在Bulk insert命令附近的这个脚本中(set @sql = 'BULK insert Temp FROM‘+ @path + @filename +’+‘'),我只看到一个表名'Test',如何在bulk INSERT命令中提到多个表名?

有什么需要帮忙的吗?

EN

回答 2

Stack Overflow用户

发布于 2020-05-21 23:01:11

我已经有很长一段时间没有这样做了,但这就是我过去做这些事情的方式。

代码语言:javascript
复制
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=100)
BEGIN

PRINT @intFlag

declare @fullpath1 varchar(1000)
select @fullpath1 = '''\\FTP\' + convert(varchar, getdate()- @intFlag , 112) + '_your_file.csv'''
declare @cmd1 nvarchar(1000)
select @cmd1 = 'bulk insert [dbo].[your_table] from ' + @fullpath1 + ' with (FIELDTERMINATOR = ''\t'', FIRSTROW = 5, ROWTERMINATOR=''0x0a'')'
exec (@cmd1)

SET @intFlag = @intFlag + 1

END
GO

正如您可以看出的,这是在循环遍历一堆文件,其中日期是文件名。每个文件名的第一部分的日期格式为:convert(varchar, getdate()- @intFlag , 112)

我猜你的文件的名字与某种特定的模式相匹配。

票数 1
EN

Stack Overflow用户

发布于 2020-05-21 23:50:37

SQl服务器有一个工具可以帮你做到这一点。转到SQL Server文件夹,打开SQL Server导入和导出向导。选择数据源Microsoft Excel选择Excel文件。并遵循以下步骤

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61936870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档