我正在尝试大量上传多个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:\Users\cob2202\Desktop\Files\Data Cube\FlatFileDestination\"'+SUBSTRING(@filename,1, LEN(@filename) -4)+'_'+cast(FORMAT(getdate(),'yyyMMDDHHmmss') as varchar)+'.csv"'
EXEC master..XP_cmdshell @moveProcessed
END
END4.在文件中阅读
Exec import_files 'C:\Users\cob2202\Desktop\Files\Data Cube\FlatFileSource\', '*.csv', 'data_cube'发布于 2022-01-27 05:30:10
是否验证了sql server服务是否具有访问该文件夹的权限?
https://stackoverflow.com/questions/70862218
复制相似问题