近期在做数据库切割工具时碰到了一些棘手的问题经过多方打探查找最终得以解决现总结下来给大家共享免的大家以后在碰到类似问题时再耗费大量时间去查找去打探!
判断输入的路径在服务器上是否存在
例如要在客户端执行一个创建数据库的程序数据库要在服务器上创建但路径可以手工输入这时就面临一个判断自已现在输入的路径在服务器上是否存在的问题免得在执行Create Database SQL时才报错找不到路径
具体方法如下
exec masterxp_cmdshell dir E:\DATA 在查询分析器中执行此段SQL如果存在此路径会输出此路径下的所有文件与文件夹信息还有此盘的可用字节数与已此文件夹的字节数(图所示);如果此路径不存在则输出信息如图所示提示找不到文件
但是当路径中含有空格时如C:\Program Files直接用exec masterxp_cmdshell dir C:\Program Files系统返回结果会如跟图显示一样我们需要做额外处理才能得到正确的返回结果
()exec masterxp_cmdshell dir C:\Program Files\Microsoft SQL Server\MSSQL
这种写法在查询分析器中直接执行是没有问题的也能返回正确结果但如果放到程序中执行
SQLAdd(exec masterxp_cmdshell dir C:\Program Files\Microsoft SQL Server\MSSQL)Open时就会报错不能执行
为什么呢???
()我们接下来查看SQL联机帮助对XP_CMDSHELL的描述如下
xp_cmdshell {command_string} [ no_output]
参数
command_string
是在操作系统命令行解释器上执行的命令字符串command_string 的数据类型为 varchar() 或 nvarchar()没有默认值command_string 不能包含一对以 上的双引号如果由 command_string 引用的文件路径或程序名称中有空格则需要使用一对引号如果使用嵌入空格不方便可考虑使用 FAT 文件名作为解决办 法
no_output
是可选参数表示执行给定的 command_string但不向客户端返回任何输出
帮助文件提示我们要用一对引号将文件路径或者程序名称包起来将整个路径包不起来不会报错那我就将带有空格的单步路径包起来试试看看行不行执行如下SQLSQLAdd(exec masterxp_cmdshell dir C:\Program Files\Microsoft SQL Server\MSSQL)这样Open时果然不报错了看来查询分析器的语法检查与我们的Query自己的语法检查还是有一定区别的不能等同的因此碰到路径中带空格的情况正确的写法还是
exec masterxp_cmdshell dir C:\Program Files\Microsoft SQL Server\MSSQL
这同时说明SQL帮助文件中的绿色字体部分 command_string 不能包含一对以上的双引号 的描述是不正确的看来SQL Server帮助文件与产品也出现了规格与程序不相符的问题了呵呵
[] []