我使用的是SQL server 2017版本,我想将多个.csv文件导入到SQL Server中的多个表中。
我在网上找到了下面的脚本,
--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命令中提到多个表名?
有什么需要帮忙的吗?
发布于 2020-05-21 23:01:11
我已经有很长一段时间没有这样做了,但这就是我过去做这些事情的方式。
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)
我猜你的文件的名字与某种特定的模式相匹配。
发布于 2020-05-21 23:50:37
SQl服务器有一个工具可以帮你做到这一点。转到SQL Server文件夹,打开SQL Server导入和导出向导。选择数据源Microsoft Excel选择Excel文件。并遵循以下步骤
https://stackoverflow.com/questions/61936870
复制相似问题