SQLServer过滤文件名特殊字符(利用SQLServer修改文件物理地址名称)

SQLServer过滤文件名特殊字符(利用SQLServer修改文件物理地址名称),第1张

概述declare @cmd nvarchar(2000) declare @messageid nvarchar(200) declare @serialid nvarchar(200) declare @oldFileName nvarchar(500) declare @fileName nvarchar(500) declare @filePath n
declare @cmd nvarchar(2000)    declare @messageID nvarchar(200)    declare @serialID nvarchar(200)    declare @oldfilename nvarchar(500)    declare @filename nvarchar(500)     declare @filePath nvarchar(4000)    declare @oldfilePath nvarchar(4000)  --将路径D:改成D$    declare @newfilePath nvarchar(4000)    declare ccur cursor for select d.MessageID,m.serialID,m.Attachmentname,m.AttachmentPath from d 			left join r on d.MessageID=r.MessageID 			left  join DataAttachment m on m.MessageID=d.MessageID 		where  d.messageID='0.abe3b3d58161ccb3de7ab63754bb3f15'  --通过数据库查找所需要的附件	             open ccur	             fetch ccur into @messageID,@serialID,@filename,@filePath	             while @@fetch_status=0                 begin                    --判断附件文件名中是否含有特殊字符                     if CHARINDEX('+',@filename)>0 or CHARINDEX('$',@filename)>0 or CHARINDEX('&',@filename)>0  --含有+、$、&                    begin                                          set @oldfilename=@filename                       set @filename=replace(@filename,'+','')                       set @filename=replace(@filename,'$','&','')    --过滤这些特殊字符,替换后新的文件名                       set @newfilePath=dbo.GetDirectoryPath(@filePath) + '\' + @filename  --新路径名(<span >dbo.GetDirectoryPath方法为根据路径获取文件目录</span><span >)</span>                       --旧路径名更改成磁盘驱动                       set @oldfilePath=replace(@filePath,'D:','D$')                            set @oldfilePath='\192.168.21.36\' + @oldfilePath   --附件在远程服务器下面,如果不是远程,不用加磁盘路径                                              -- exec master.dbo.xp_cmdshell 'net use \<span >192.168.21.36</span><span >\d$ "123456" /user:"192.168.21.36\administrator"'</span>                       --exec  master.dbo.xp_cmdshell   'ren   \<span >\d$\Book1.xls,Book2.xls'</span>                       set @cmd='ren '  + @oldfilePath + ',' + @filename + ''    --拼凑需要自行的命令                       --修改文件物理位置名称(连接远程服务器及其需要修改文件名所在的盘符)                       exec master.dbo.xp_cmdshell 'net use \192.168.21.36\d$ "123456" /user:"192.168.21.36\administrator"'                       exec  master.dbo.xp_cmdshell  @cmd  --@cmd的长度必须设置具体数据,不能设置为nvarchar(max),会报“过程需要类型为 'varchar' 的参数 'command_string'”错误                       --插入文件名修改日志表                       insert into DatafilenameUpdateLog(messageID,oldfilename,newfilename,oldfilePath,newfilePath)                       values(@messageID,@oldfilename,@filename,@filePath,@newfilePath)                       --根据serialID更新新文件名和新路径(serialID为唯一性)                       update A set Attachmentname=@filename,AttachmentPath=@newfilePath where serialID=@serialID                       --给我插入消息提醒                       declare @content nvarchar(max)                       set @content='集团来文附件名含有特殊符号,已过滤,请注意查看。serialID:' + @serialID + ',messageID:' + @messageID +                       ',原文件名:' + @oldfilename + ',新文件名:' + @filename + '(系统自动发送)'                       exec aa.dbo.[aaRemind] 0,'',11182,@content                    end                                    fetch ccur into @messageID,@filePath	                              end	                             close ccur  	              deallocate ccur  end


根据路径获取文件目录dbo.GetDirectoryPath方法

-- =============================================  -- Author:        Paul Griffin  -- Create date:   18 January 2015  -- Description:   Returns the path without the file name  --                from a full path:  --                    D:\Temp\Resources\Images\My.Picture.jpg  --                ==> D:\Temp\Resources\Images  -- =============================================  CREATE FUNCTION [dbo].[GetDirectoryPath]  (      @Path NVARCHAR(MAX)  )  RETURNS NVARCHAR(MAX)  AS  BEGIN      DECLARE @filename NVARCHAR(MAX)      DECLARE @Reversedpath NVARCHAR(MAX)      DECLARE @PathLength INT         SET @Reversedpath = REVERSE(@Path)      SELECT @PathLength = CHARINDEX('\',@Reversedpath)      SELECT @filename = left(@Path,LEN(@Path) - @PathLength)      RETURN @filename  END  
总结

以上是内存溢出为你收集整理的SQLServer过滤文件名特殊字符利用SQLServer修改文件物理地址名称)全部内容,希望文章能够帮你解决SQLServer过滤文件名特殊字符(利用SQLServer修改文件物理地址名称)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1165416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存