在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. 【IOI2019】2048矩形模拟

    /* dos windows 25*80 */ #include <algorithm> #include <windows.h> #include <iostream& ...

  2. 微信小程序向本地保存

    提示框: wx.showToast(OBJECT) 显示消息提示框 wx.saveImageToPhotosAlbum({ filePath : "./test.png", //这 ...

  3. P2822 组合数问题——巧用前缀和

    P2822 组合数问题 求的是C(i,j)有多少个是k的倍数: 首先,求组合数是有技巧的, 用杨辉三角求组合数,爽的一批: 但是,这样只能得90分,两个点T了: 因为k是不变的,我们可以用前缀和的思想 ...

  4. 1820:【00NOIP提高组】进制转换

    #include<bits/stdc++.h>//十分简单(滑稽)的一道模拟题 using namespace std; ]={'A','B','C','D','E','F','G','H ...

  5. python pillow 绘制图片

    demo1 #coding=utf- from PIL import Image img = Image.,))###创建一个5*5的图片 pixTuple = (,,,)###三个参数依次为R,G, ...

  6. 【知识点】Java常用类库

    1.字符串 修改字符串内容用StringBuffer,没有“+”,需要用append(),否则用String 2.JVM 相关 Runtime,单例模式,通过getRuntime()获取实例,可以调用 ...

  7. OpenFOAM中的基本变量快速认知【转载】

    转载自:http://blog.sina.com.cn/s/blog_a0b4201d0102vsf9.html label 实际上就是整型数据的变体,int,OF对它进行了包装,以适应32或64位系 ...

  8. linuxfind命令按照文件大小搜索的注意事项

    [root@localhost ~]# man find -size n[cwbkMG] File uses n units of space. The following suffixes can ...

  9. 用了pm2之后,如何让console.log('..')出现在控制台

    使用  pm2 log 0 可以查看.当然这个 0 应该是应用的 id

  10. 记一次环境变量导致的elasticsearch启动错误:max file descriptors [65535] for elasticsearch process is too low, incre

    问题描述,elasticsearch启动时报max file descriptors错误: [hadoop@node-33 elasticsearch-5.4.0]$ bin/elasticsearc ...