SQL-无法进行大容量加载



我正在尝试将多个CSV文件批量上载到SSMS。我用适当的列名创建了表,但当我执行代码时,对包含CSV文件的文件夹的访问被拒绝。

我在网上读到,你需要将文件存储在服务器所在的相同位置,但这对我来说不是一个选项

我还试图编辑CSV文件所在文件夹的权限,但访问仍然被拒绝。

有人能解决这个问题吗?我花了几个小时试图找到一个。

我的代码

1.创建一个表来存储CSV信息

CREATE TABLE [dbo].[data_cube](
[Name] [nvarchar](1000) NULL,
[Country][nvarchar](1000) NULL,
[Occupation][nvarchar](1000) NULL,
[Hobby][nvarchar](1000) NULL
) on [Primary]

2.创建表以存储导入文件的信息

CREATE TABLE [dbo].[files_logtable](
[id] [int] IDENTITY(1,1) NOT NULL,
[filename] [varchar](200) NULL,
[date_created] [datetime] DEFAULT GETDATE()
)ON [Primary]

3.创建一个存储过程

CREATE PROCEDURE import_files @filepath varchar(500), @pattern varchar(100), @tablename varchar(100)
AS
BEGIN
DECLARE @query varchar(1000), @moveProcessed varchar(1000)
CREATE TABLE #x(name varchar(200))
set @query = 'master.dbo.xp_cmdshell "dir '+@filepath+@pattern+' /b"'
insert #x exec (@query)
delete from #x where name IS NULL
select identity(int,1,1) as ID,name into #y from #x
drop table #x
Declare @max1 int, @count1 int, @filename varchar(200)
set @max1 = (select max(ID) from #y)
set @count1 = 0
while @count1 < @max1
BEGIN
SET @count1 = @count1+1
SET @filename = (select name from #y where [id]=@count1)
set @query = 'BULK INSERT '+@tablename+' FROM "'+@filepath+@filename+'" WITH (FIELDTERMINATOR = '','',FIRSTROW=1,ROWTERMINATOR=''n'')'
EXEC (@query)
insert into file_logtable(filename) select @filename
set @moveProcessed = 'MOVE "'+@filepath+@filepath+'" C:Userscob2202DesktopFilesData CubeFlatFileDestination"'+SUBSTRING(@filename,1, LEN(@filename) -4)+'_'+cast(FORMAT(getdate(),'yyyMMDDHHmmss') as varchar)+'.csv"'

EXEC master..XP_cmdshell @moveProcessed
END
END

4.读入文件

Exec import_files 'C:Userscob2202DesktopFilesData CubeFlatFileSource', '*.csv', 'data_cube'

是否验证了sql server服务是否具有访问文件夹的权限?

最新更新