SQL语句如何获取文件夹下文件名

时间:2022-09-13 22:11:04
有一个表NG_Study_2D,包含有2个字段PanelID、HGPic1
其中PanelID是唯一表识,HGPic1存放的是一个图片格式文件名(包含路径)。
所有图片文件都存在远程服务器上,已经通过以下语句打通远程服务器
exec master..xp_cmdshell  'net use  \\IP\image  pwd  /user:username'

图片文件名与PanelID有关联,例如
PanelID是A0001,则图片文件件名为A0001_随机几个数字_001.jpg,然后把A0001_随机几个数字_001.jpg拷贝
到本地,D:\Image,同时图片名统一更改为日期相关格式:yy_mm_dd_hh_min_ss.jpg,日期对应文件修改日期即可。
由此对应HGPic1字段格式为(举例):\\IP\image\10_01_02_06_40_07.jpg


我需要把NG_Study_2D中HGPic1字段全部更新一下,根据PanelID在远程服务器上找到并复制到本地,同时改名统一

要怎么操作比较方便?

11 个解决方案

#1


纠正一下HGPic1应该为 D:\Image\10_01_02_06_40_07.jpg 

#2


达人们指点一下啊

#3


放程序中做吧 调用API函数

#4


程序里做知道的,VB中做过,但是这个小功能单独写个程序似乎不太必要,
应为图片文件每天会自动生成,我需要定时自动导入,写个程序还必须保证一直运行,比较麻烦。
计划在SQL作业里添加一项,自动运行,定时加载

#5


xp_getfiledetails 它可以得到文件的具体信息

#6


你是不是要说: insert #temp exec xp_cmdshell.....?

#7


最关键不知道怎么获取文件名,
比如PanelID是A0001,对应的文件名是A0001_随机的数字_001.jpg,
我怎么找到这个文件呢?xp_fileexist好像必须是精确的文件名

#8



--只做参考用,我是不建议直接用sql来做
create table #file(filepath nvarchar(200))
insert into #file exec master..xp_cmdshell N'dir /b \\IP\image\*.jpg'
--共享路径下的所有jpg文件名都在#file里了
--对此table,逐笔处理,调用xp_cmdshell ,利用copy命令就可
--类似如下,不写了
declare c1 cursor for select N'\\IP\image\'+filepath as filepath
 from #file where filepath is not null
open c1
....

set @copy=N'copy '+@filepath + N' D:\image\'+你处理的日期名字.jpg
exec master..xp_cmdshell @copy
...

#9


--将文件名写入filename.txt
exec master..xp_cmdshell 'dir /b c:\image\A0001_*_001.jpg >c:\image\filename.txt'
--读取文件名
select *   FROM   OPENROWSET('MICROSOFT.JET.OLEDB.4.0', 'Text;HDR=no;DATABASE=c:\image\',filename#txt)

#10


建议还是用程序来做 或者用正则来搞定

#11


用程序做了

#1


纠正一下HGPic1应该为 D:\Image\10_01_02_06_40_07.jpg 

#2


达人们指点一下啊

#3


放程序中做吧 调用API函数

#4


程序里做知道的,VB中做过,但是这个小功能单独写个程序似乎不太必要,
应为图片文件每天会自动生成,我需要定时自动导入,写个程序还必须保证一直运行,比较麻烦。
计划在SQL作业里添加一项,自动运行,定时加载

#5


xp_getfiledetails 它可以得到文件的具体信息

#6


你是不是要说: insert #temp exec xp_cmdshell.....?

#7


最关键不知道怎么获取文件名,
比如PanelID是A0001,对应的文件名是A0001_随机的数字_001.jpg,
我怎么找到这个文件呢?xp_fileexist好像必须是精确的文件名

#8



--只做参考用,我是不建议直接用sql来做
create table #file(filepath nvarchar(200))
insert into #file exec master..xp_cmdshell N'dir /b \\IP\image\*.jpg'
--共享路径下的所有jpg文件名都在#file里了
--对此table,逐笔处理,调用xp_cmdshell ,利用copy命令就可
--类似如下,不写了
declare c1 cursor for select N'\\IP\image\'+filepath as filepath
 from #file where filepath is not null
open c1
....

set @copy=N'copy '+@filepath + N' D:\image\'+你处理的日期名字.jpg
exec master..xp_cmdshell @copy
...

#9


--将文件名写入filename.txt
exec master..xp_cmdshell 'dir /b c:\image\A0001_*_001.jpg >c:\image\filename.txt'
--读取文件名
select *   FROM   OPENROWSET('MICROSOFT.JET.OLEDB.4.0', 'Text;HDR=no;DATABASE=c:\image\',filename#txt)

#10


建议还是用程序来做 或者用正则来搞定

#11


用程序做了