在master数据库中,SQL Server提供系统扩展的存储过程,其中有一些存储过程的命名以xp_开头,用于处理操作系统的文件。

一,判断文件是否存在

存储过程sys.xp_fileexist 用于判断文件是否存在,参数是文件(file)的路径或目录的路径:

exec master.sys.xp_fileexist 'D:\test.txt'

该存储过程返回的结果集有一行数据,三个字段,如下图:

二,创建子目录

存储过程 sys.xp_create_subdir 用于创建子目录,参数是子目录的路径:

exec master.sys.xp_create_subdir 'D:\test'

执行存储过程,系统返回消息:Command(s) completed successfully,说明子目录创建成功。

三,查看子目录结构

存储过程sys.xp_dirtree 用于显示当前目录的子目录,该存储过程有三个参数:

  • directory:第一个参数是要查询的目录;
  • depth :第二个参数是要显示的子目录的深度,默认值是0,表示显示所有的子目录;
  • file :第三个参数是bool类型,指定是否显示子目录中的文件(file),默认值是0,表示不显示任何文件,只显示子目录(directory);
exec master.sys.xp_dirtree 'D:\data'

该存储过程返回的字段有子目录名称和相对深度,返回的结果中并没有显示子目录的父子关系:

四,删除文件

存储过程 sys.xp_delete_file 用于删除文件,该存储过程有5个参数:

  • 第一个参数是文件类型(File Type),有效值是0和1,0是指备份文件,1是指报表文件;
  • 第二个参数是目录路径(Folder Path), 目录中的文件会被删除,目录路径必须以“\”结尾;
  • 第三个参数是文件的扩展名(File Extension),常用的扩展名是'BAK' 或'TRN';
  • 第四个参数是Date,早于该日期创建的文件将会被删除;
  • 第五个参数是子目录(Subfolder),bool类型,0是指忽略子目录,1是指将会删除子目录中的文件;

该存储过程不会删除任意类型的文件,系统限制它只能删除特定类型(备份文件和报表文件)的文件。

declare @Date datetime = dateadd(day,-30,getdate())
exec master.sys.xp_delete_file 0,'D:\test\','bak',@Date,0

五,查看磁盘驱动的空闲空间

存储过程 sys.xp_fixeddrives用于查看磁盘驱动器剩余(free)的空间

exec sys.xp_fixeddrives

六,执行DOS命令操作文件

存储过程sys.xp_cmdshell 用于执行DOS命令,该功能对应SQL Server系统的xp_cmdshell高级选项,默认情况下,该选项是禁用的,执行该存储过程,系统会抛出错误消息:

SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 'xp_cmdshell' in SQL Server Books Online.

因此,在执行该存储过程之前,必须启用xp_cmdshell选项,由于启用该选项有潜在的风险,建议用户在执行代码之后,禁用该选项。

1,启用/禁用xp_cmdshell选项

xp_cmdshell选项属于系统的高级选项,执行以下代码,允许用户修改高级选项:

-- To allow advanced options to be changed.
exec sys.sp_configure 'show advanced options', 1;
go
-- To update the currently configured value for advanced options.
reconfigure;
go

使用以下代码启用xp_cmdshell选项:

-- To enable the feature.
exec sys.sp_configure 'xp_cmdshell', 1;
go
-- To update the currently configured value for this feature.
reconfigure;
go

使用以下代码禁用xp_cmdshell选项:

-- To disable the feature.
exec sys.sp_configure 'xp_cmdshell', 0;
go
-- To update the currently configured value for this feature.
reconfigure;
go

2,常用的DOS命令

该存储过程使得用户可以通过TSQL命令执行DOS命令,参数是命令字符串:

exec sys.xp_cmdshell 'command_string' 

2.1 建立新文件或增加文件内容

格式:ECHO 文件内容>file_name

exec master.dbo.xp_cmdshell 'echo abc > D:\share\test.txt'

2.2 查看文件内容

格式:TYPE file_name

exec master.dbo.xp_cmdshell 'type D:\share\test.txt'

2.3 复制文件

格式: COPY  file_name  new_folder

exec master.dbo.xp_cmdshell 'copy D:\test\test.txt D:\share\'

2.4 显示目录

格式:DIR folder

exec master.dbo.xp_cmdshell 'dir D:\share\' 

2.5 创建目录

格式:MD folder_name

exec master.dbo.xp_cmdshell 'md D:\share\test\'

2.6 删除目录

格式:RD folder

exec master.dbo.xp_cmdshell 'rd D:\share\test' 

2.7 删除文件

格式:DEL file_name

exec master.dbo.xp_cmdshell 'del D:\share\test.txt' 

2.8 重命名文件

格式:REN [盘符:][路径]〈旧文件名〉〈新文件名〉

exec master.dbo.xp_cmdshell 'ren D:\test\test.txt new.txt' 

2.9 移动文件

格式:MOVE  file_name new_folder

exec master.dbo.xp_cmdshell 'move D:\test\new.txt D:\share\' 

2.10 切换目录

格式:CD[盘符:][路径名][子目录名]

3,执行BCP命令

参考文档:

xp_cmdshell Server Configuration Option

xp_cmdshell (Transact-SQL)

常见dos命令总结

DOS中的ECHO命令详解

【基本优化实践】【1.6】在sql server修改且移动数据库文件位置的更多相关文章

  1. 如何将SQL Server 2000备份的数据库文件还原(升级)为SQL Server 2005或更高版本的数据库?

    其实很简单,有两种方法. 方法一:将SQL Sever 2000数据库备份的数据库文件名后面加上“.bak”,然后直接在SQL Sever 2005或者高版本软件里面直接还原即可: 方法二:在SQL ...

  2. 在 SQL Server 中的网络数据库文件的支持说明

    其实就是一个学员问SQL Server 是否能存放的于NAS(UAC 的路径下). 官方的回答简略版本为:可以,需要满足一些强制性的硬件要求.但需要考虑一系列的性能的问题. http://suppor ...

  3. SQL Server 2008 导入MDF数据库文件

    1.将.MDF和.LDF文件拷到SQL Server2008数据目录,如:\\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\ ...

  4. 基于Sql Server 2008的分布式数据库的实践(五)

    原文 基于Sql Server 2008的分布式数据库的实践(五) 程序设计 ------------------------------------------------------------- ...

  5. 基于Sql Server 2008的分布式数据库的实践(四)

    原文 基于Sql Server 2008的分布式数据库的实践(四) 数据库设计 1.E-R图 2.数据库创建 Win 7 1 create database V3 Win 2003 1 create  ...

  6. 基于Sql Server 2008的分布式数据库的实践(三)

    原文 基于Sql Server 2008的分布式数据库的实践(三) 配置PHP 1.打开PHP配置文件,找到extension=php_mssql.dll,将前面的注释符号去掉 2.找到mssql.s ...

  7. 基于Sql Server 2008的分布式数据库的实践(二)

    原文 基于Sql Server 2008的分布式数据库的实践(二) 从Win7连接Win2003的Sql Server 2008 1.新建链接服务器链接到Win2003的Sql Server 2008 ...

  8. 基于Sql Server 2008的分布式数据库的实践(一)

    原文 基于Sql Server 2008的分布式数据库的实践(一) 配置Sql Server 2008(Win7) 1.打开SQL server2012,使用windows身份登录 2.登录后,右键选 ...

  9. 《SQL Server企业级平台管理实践》读书笔记——SQL Server如何设置自动增长和自动收缩项

    SQL Server允许用户设置数据库初始值和最大值,可以通过自动增长或者自动收缩进行配置.通过这些配置,我们可以防止数据库空间问题而导致的应用程序修改失败或者SQL Server磁盘空间耗尽的事情发 ...

随机推荐

  1. Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)

    2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...

  2. 针对于linux初学者的学习(摘自网络端)

    一. 选择适合自己的Linux发行版谈到linux的发行版本,太多了,可能谁也不能给出一个准确的数字,但是有一点是可以肯定的,linux正在变得越来越流行, 面对这么多的Linux 发行版,打算从其他 ...

  3. 机器学习系列算法1:KNN

    思路:空间上距离相近的点具有相似的特征属性. 执行流程: •1. 从训练集合中获取K个离待预测样本距离最近的样本数据; •2. 根据获取得到的K个样本数据来预测当前待预测样本的目标属性值 三要素:K值 ...

  4. ubuntu video and audio

    推荐你直接安装ubuntu-studio系统.里面有默认安装了很多多媒体软件,主要集中在4个方面1.音频编辑:Jack, Ardour, Audacity, Qtractor. Hydrogen, Y ...

  5. js的基本数据类型

    Undefined.Null.Boolean.Number.String.ECMAScript 2015 新增:Symbol(创建后独一无二且不可变的数据类型 )

  6. 中间件 | mq消息队列解说

    消息队列 1.1 什么是消息队列 我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用.消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系 ...

  7. MySQL查询获取行号rownum

    MySQL中可以使用变量产生行号,下面是2个简单例子: 使用工具:MySQL Workbench 说明:表heyf_10中字段,empid(员工工号).deptid(部门编号).salary(薪资): ...

  8. E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem. 爆错解决办法

    author  :headsen chen date : 2019-06-06  10:09:06 root@ubuntu:~# apt-get remove java-1.8.0-openjdk E ...

  9. keras Model 1 入门篇

    1 入门 2 多个输入和输出 3 共享层 最近在学习keras,它有一些实现好的特征提取的模型:resNet.vgg.而且是带权重的.用来做特诊提取比较方便 首先要知道keras有两种定义模型的方式: ...

  10. ORA-00911: invalid character 错误解决集锦

    转: ORA-00911: invalid character 错误解决集锦 参考https://www.linuxidc.com/Linux/2017-05/144361.htm ORA-00911 ...