【发布时间】:2014-06-12 21:31:29
【问题描述】:
我正在使用 SQL Server 2008 R2 创建一个存储过程来跟踪某些服务器文件夹的已用空间。对于特定目录,我遇到了一个有趣的问题。
当我运行 EXEC master.dbo.xp_cmdshell 'dir "\\servername\e$\media\Google" /s /-C' 时,我得到一个结果:
但是,当我为 dos 命令使用变量时DECLARE @dir VARCHAR(255) = 'dir "\\servername\e$\media\Google" /s /-C'
EXEC master.dbo.xp_cmdshell @dir
我得到了不同的结果:
可以看到文件数相同,但使用的字节数不同。以下是包含文件的子目录的详细信息:
不使用变量:
使用@dir 变量:
您可以看到,虽然看起来每个文件的大小相同,但总大小却不同。
我还有其他带有 zip 文件的子目录没有出现这种行为。 有没有人对可能导致这种情况的原因有任何想法?或者如何解决?
【问题讨论】:
-
我不知道为什么会发生这种情况,但我确实在 SQL Server 2008 R2 和 SQL Server 2012 上重现了差异。(奇怪的是,我只在“Dir(s).. .bytes free”行而不是“File(s)...bytes”行。)我尝试了除 DIR 之外的一些命令,但在使用字符串和变量执行时找不到任何产生不同结果的命令。跨度>
标签: sql-server sql-server-2008-r2 dos dir xp-cmdshell