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

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 @[email protected]
                       set @filename=replace(@filename,'+','')
                       set @filename=replace(@filename,'$','')
                       set @filename=replace(@filename,'&','')    --过滤这些特殊字符,替换后新的文件名
                       set @newFilePath=dbo.GetDirectoryPath(@filePath) + '\' + @filename  --新路径名(<span style="font-family: Arial, Helvetica, sans-serif;">dbo.GetDirectoryPath方法为根据路径获取文件目录</span><span style="font-family: Arial, Helvetica, sans-serif;">)</span>
                       --旧路径名更改成磁盘驱动
                       set @oldfilePath=replace(@filePath,'D:','D$')
                       set @oldfilePath='\\192.168.21.36\' + @oldfilePath   --附件在远程服务器下面,如果不是远程,不用加磁盘路径

                       -- exec master.dbo.xp_cmdshell 'net use \\<span style="font-family: Arial, Helvetica, sans-serif;">192.168.21.36</span><span style="font-family: Arial, Helvetica, sans-serif;">\d$ "123456" /user:"192.168.21.36\administrator"'</span>
                       --exec  master.dbo.xp_cmdshell   'ren   \\<span style="font-family: Arial, Helvetica, sans-serif;">192.168.21.36</span><span style="font-family: Arial, Helvetica, sans-serif;">\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  [email protected]的长度必须设置具体数据,不能设置为nvarchar(max),会报“过程需要类型为 'varchar' 的参数 'command_string'”错误

                       --插入文件名修改日志表
                       insert into DataFileNameUpdateLog(messageid,oldFileName,newFileName,oldFilePath,newFilePath)
                       values(@messageid,@oldfileName,@filename,@filePath,@newFilePath)
                       --根据serialid更新新文件名和新路径(serialid为唯一性)
                       update A set [email protected],[email protected] where [email protected]

                       --给我插入消息提醒
                       declare @content nvarchar(max)
                       set @content='集团来文附件名含有特殊符号,已过滤,请注意查看。serialid:' + @serialid + ',messageid:' + @messageid +
                       ' ,原文件名:' + @oldfileName + ',新文件名:' + @filename + '(系统自动发送)'
                       exec aa.dbo.[aaRemind] 0,'',11182,@content
                    end                  

                  fetch ccur into @messageid,@serialid,@fileName,@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  

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 04:39:26

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

批量修改文件夹名称,从此再也不愁了

package practice; import java.io.File; /** * 通过这个程序可以批量修改文件夹的名字 * @author asus * */public class ChangeName { public static void main(String[] args) { //封装数据源 File file = new File("F:\\Java\\历经5年锤炼(史上最适合初学者入门的Java基础视频)"); //获取文件夹下所有文件及文件夹 File[]

mssql 修改文件逻辑名称

--查看文件逻辑名SELECT name FROM sys.database_files ALTER DATABASE [本身数据库名称]MODIFY FILE ( NAME = [原错误数据库名称], NEWNAME = [新正确数据库名称] ) --修改文件-逻辑名ALTER DATABASE [zhitou]MODIFY FILE ( NAME = [sh-xuesheying], NEWNAME = [zhitou] )ALTER DATABASE [zhitou]MODIFY FILE

(转)在SqlServer中,教你如何修改列名

通常,我们在使用SqlServer创建数据库中,在创建基本表时,偶尔会把表中的列名给起错了.想要把列名给改过来,一般有很多种改法,但是复杂程度却是不一样,有的人把整个表格删掉,重新建立来达到修改列名......通常花费大量的力气, 在这里,向大家介绍一种方法,直接一个语句就可搞定. 例如:我们已在数据库中建立了如下表 但是根据需要,想要把表中国的Ssex列名该为Sex,利用如下语句就OK: exec sp_rename 'student.Ssex','Sex','column'; 执行后就可达到

利用SQLServer查询分析器获取存储过程的返回值,检查测试存储过程

1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况(1)如果通过查询分析器执行该存储过程,在显示栏中如果有影响的行数,则影响几行count就是几(2)如果通过查询分析器执行该存储过程,在显示栏中如果显示'命令已成功完成.'则count = -1;在显示栏中如果有查询结果,则count = -1总结:A.ExecuteNonQuery()该方法只返回影响的行数,如果没有影响

一个批量修改文件夹中文件名的命令

1. 只修改当前目录下的文件 [root]# rename -s  \.png  \_iphone.png  * 这个是修改目录下 的所有文件名,加入一个后缀 如: 1.png    ->>>   1_iphone.png 2. 递归修改当前目录下的所有子文件夹 [root]# find ./ -name  "*.png" | xargs  -I {} rename -s \.png  \_iphone.png  {} 如: 2.png    ->>>

修改文件名称或者替换文件名中的内容

import os def putName(path, flag, oldName, newName): """ 修改文件名称或者替换文件名中的内容 """ dirList = os.listdir(path) for i in dirList: if i.startswith('.'): continue newPath = os.path.join(path, i) if os.path.isdir(newPath): putName(new

VI修改文件

找到路径 vi  文件名 i  添加或修改 esc :  wq  保存退出 ---------------------------------------------------------------------------------------- linux下vi命令大全 进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/p

sqlserver锁机制详解(sqlserver查看锁)

简介 在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于 大多数数据库来说是需要同时处理多个查询的.这些查询并不会像绅士那样排队等待执行,而是会找最短的路径执行.因此,就像十字路口需要一个红绿灯那 样,SQL Server也需要一个红绿灯来告诉查询:什么时候走,什么时候不可以走.这个红绿灯就是锁. 图1.查询可不会像绅士们那样按照次序进行排队 为什么需要锁 在开始谈锁之前,首先要简单了解一下事

ubuntu下修改文件夹权限

常用方法如下: sudo chmod 600 ××× (只有所有者有读和写的权限)sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)sudo chmod 700 ××× (只有所有者有读和写以及执行的权限)sudo chmod 666 ××× (每个人都有读和写的权限)sudo chmod 777 ××× (每个人都有读和写以及执行的权限) 其中×××指文件名(也可以是文件夹名,不过要在chmod后加-ld). 解释一下,其实整个命令的形式是sudo chmod