<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sybase数据库技术，数据库恢复专家 &#187; xp_fixeddrives</title>
	<atom:link href="http://www.dbainfo.net/tag/xp_fixeddrives/feed" rel="self" type="application/rss+xml" />
	<link>https://www.dbainfo.net</link>
	<description>提供Sybase ASE及Sybase SQL Anywhere数据库修复服务，电话：13811580958(微信)，QQ：289965371！We have many years of experience in recovering data from damanged Sybase devices. Contact us by Phone: +86 13811580958 Wechat: 13811580958 Email: 289965371@qq.com</description>
	<lastBuildDate>Sat, 14 Jun 2025 16:28:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>得到SQLSERVER 2005 数据库的当前数据库中的数据文件所在磁盘的剩余空间</title>
		<link>https://www.dbainfo.net/sqlserver2005-get-datafile-located-disk-freespace.htm</link>
		<comments>https://www.dbainfo.net/sqlserver2005-get-datafile-located-disk-freespace.htm#comments</comments>
		<pubDate>Tue, 18 May 2010 10:18:06 +0000</pubDate>
		<dc:creator>dbainfo</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>
		<category><![CDATA[sp_spaceused]]></category>
		<category><![CDATA[sqlserver]]></category>
		<category><![CDATA[xp_fixeddrives]]></category>
		<category><![CDATA[空间]]></category>

		<guid isPermaLink="false">http://www.dbainfo.net/?p=721</guid>
		<description><![CDATA[在csdn论坛上看到有人问，如何获取指定数据库所在磁盘的磁盘剩余空间。 http://topic.csdn.net/u/20100518/16/70cae8d3-a9de-4e45-9f49-fe8b00d8ba74.html?seed=1945596721&#38;r=65529065#r_65529065 解决的思路是：通过sysfiles系统表找到数据库所属数据文件所在的物理路径，从数据文件的物理路径中提取所在磁盘盘符（第一个字母），最后用扩展存储过程xp_fixeddrives来获得磁盘驱动器的剩余空间(MB Bytes)。 SQL语句如下： declare @drivename char(1) select @drivename=left(filename,1) from sysfiles where fileid=&#160; 1 if not exists(select 1 from tempdb.dbo.sysobjects where name like &#39;#FreeSpace%&#39; and type=&#39;U&#39;) &#160; create table #FreeSpace( &#160;&#160;&#160; Drive char(1), &#160;&#160;&#160; MB_Free int &#160;&#160;&#160; ) else &#160;&#160;&#160;&#160;&#160; truncate table #FreeSpace &#160;&#160;&#160;&#160;&#160; insert into #FreeSpace exec xp_fixeddrives select MB_Free from #FreeSpace where [...]]]></description>
			<content:encoded><![CDATA[<p>在csdn论坛上看到有人问，如何获取指定数据库所在磁盘的磁盘剩余空间。</p>
<p><a href="http://topic.csdn.net/u/20100518/16/70cae8d3-a9de-4e45-9f49-fe8b00d8ba74.html?seed=1945596721&amp;r=65529065#r_65529065" target="_blank">http://topic.csdn.net/u/20100518/16/70cae8d3-a9de-4e45-9f49-fe8b00d8ba74.html?seed=1945596721&amp;r=65529065#r_65529065<br />
	</a></p>
<p>解决的思路是：通过sysfiles系统表找到数据库所属数据文件所在的物理路径，从数据文件的物理路径中提取所在磁盘盘符（第一个字母），最后用扩展存储过程xp_fixeddrives来获得磁盘驱动器的剩余空间(MB Bytes)。</p>
<p>SQL语句如下：</p>
<blockquote>
<p>declare @drivename char(1)<br />
		select @drivename=left(filename,1) from sysfiles where fileid=&nbsp; 1<br />
		if not exists(select 1 from tempdb.dbo.sysobjects where name like &#39;#FreeSpace%&#39; and type=&#39;U&#39;)<br />
		&nbsp; create table #FreeSpace(<br />
		&nbsp;&nbsp;&nbsp; Drive char(1),<br />
		&nbsp;&nbsp;&nbsp; MB_Free int<br />
		&nbsp;&nbsp;&nbsp; )<br />
		else<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; truncate table #FreeSpace<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
		insert into #FreeSpace <br />
		exec xp_fixeddrives<br />
		select MB_Free from #FreeSpace where Drive = @drivename<br />
		go<br />
		&nbsp;</p>
</blockquote>
<p>我的测试环境是的结果如下：</p>
<blockquote>
<p>1&gt; declare @drivename char(1)<br />
		2&gt; select @drivename=left(filename,1) from sysfiles where fileid=&nbsp; 1<br />
		3&gt;<br />
		4&gt; if not exists(select 1 from tempdb.dbo.sysobjects where name like &#39;#FreeSpace<br />
		%&#39; and type=&#39;U&#39;)<br />
		5&gt;&nbsp;&nbsp; create table #FreeSpace(<br />
		6&gt;&nbsp;&nbsp;&nbsp;&nbsp; Drive char(1),<br />
		7&gt;&nbsp;&nbsp;&nbsp;&nbsp; MB_Free int<br />
		8&gt;&nbsp;&nbsp;&nbsp;&nbsp; )<br />
		9&gt; else<br />
		10&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; truncate table #FreeSpace<br />
		11&gt;<br />
		12&gt; insert into #FreeSpace<br />
		13&gt; exec xp_fixeddrives<br />
		14&gt;<br />
		15&gt; select MB_Free from #FreeSpace where Drive = @drivename<br />
		16&gt; go</p>
<p>		(3 行受影响)<br />
		MB_Free<br />
		-----------<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18905</p>
<p>		(1 行受影响)<br />
		1&gt;<br />
		2&gt;<br />
		3&gt; select filename from sysfiles<br />
		4&gt; go<br />
		filename</p>
<p>		--------------------------------------------------------------------------------<br />
		--------------------------------------------------------------------------------<br />
		--------------------------------------------------------------------------------<br />
		--------------------<br />
		D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf</p>
<p>		D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog.ldf</p>
<p>		(2 行受影响)<br />
		1&gt; xp_fixeddrives<br />
		2&gt; go<br />
		drive MB 可用空间<br />
		----- -----------<br />
		C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26562<br />
		D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18905<br />
		E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 22517</p>
<p>		(3 行受影响)</p>
</blockquote>
<p>上面的sql语句和csdn上帖子的发帖人要求的有点差距，</p>
<p>第一：指定数据库，这点很容易。直接select filename from &lt;your_db_name&gt;.dbo.sysfiles即可。</p>
<p>第二：某个数据库的数据文件可能跨越两个及以上不同的物理磁盘；所以@drivename变量有可能得到不唯一的值。可以考虑用游标来实现。</p>
<p>&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;-<br />
	&mdash;- 本文为andkylee个人原创，请在尊重作者劳动成果的前提下进行转载；<br />
	&mdash;- 转载务必注明原始出处 :<a href="../" target="_blank" title="http://www.dbainfo.net"> http://www.dbainfo.net</a><br />
	&mdash;- 关键字：sqlcmd sqlserver2005 sysfiles xp_fixeddrives 磁盘剩余空间<br />
	&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;-</p>
<div style="clear: both; margin: 10px 0pt; border: 1px dashed rgb(153, 153, 153); font-size: 12px; padding: 5px 10px;">
<li>本文链接地址：<a href="https://www.dbainfo.net/sqlserver2005-get-datafile-located-disk-freespace.htm">https://www.dbainfo.net/sqlserver2005-get-datafile-located-disk-freespace.htm</a>；</li>
<li>本文为dbainfo个人原创，请在尊重作者劳动成果的前提下进行转载；</li>
<li>转载务必注明原始出处 : <a href="https://www.dbainfo.net/">Sybase数据库技术，数据库恢复专家</a>；</li>
<li>对《<a href="https://www.dbainfo.net/sqlserver2005-get-datafile-located-disk-freespace.htm">得到SQLSERVER 2005 数据库的当前数据库中的数据文件所在磁盘的剩余空间</a>》有何疑问或见解，请在本文下方发表；</li>
<li>对网站还有其他问题或建议，请提交在<a href="https://www.dbainfo.net/messages" target="_blank">留言板</a>，谢谢！</li>
</div>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2012-10-19 -- <a href="https://www.dbainfo.net/ase-segment-spaceusage.htm" title="统计ASE数据库空间剩余率">统计ASE数据库空间剩余率</a> (2)</li><li>2011-03-21 -- <a href="https://www.dbainfo.net/sybase-ase-sp_spaceused-error-1151.htm" title="执行过程sp_spaceused的时候报error:1151">执行过程sp_spaceused的时候报error:1151</a> (0)</li><li>2010-09-28 -- <a href="https://www.dbainfo.net/sql-server-database-all-tables-space-order-desc2.htm" title="SQL SERVER中查看表占用空间的另外一种方法">SQL SERVER中查看表占用空间的另外一种方法</a> (0)</li><li>2010-09-15 -- <a href="https://www.dbainfo.net/sql-server-database-all-tables-space-order-desc.htm" title="统计SQL SERVER数据库内所有表占用空间并排序">统计SQL SERVER数据库内所有表占用空间并排序</a> (0)</li><li>2019-04-11 -- <a href="https://www.dbainfo.net/sql-server-recovery-service.htm" title="SQL Server 数据库修复专家SQLRescue">SQL Server 数据库修复专家SQLRescue</a> (0)</li><li>2011-08-25 -- <a href="https://www.dbainfo.net/get-free-space-of-device-and-database-allocation-prior-to-ase12-5.htm" title="ASE15.x之前版本中查看设备剩余空间以及设备上数据库分配信息的存储过程">ASE15.x之前版本中查看设备剩余空间以及设备上数据库分配信息的存储过程</a> (0)</li><li>2010-11-03 -- <a href="https://www.dbainfo.net/sql2005-direct-update-system-catalogs.htm" title="SQL2005 如何更新系统表">SQL2005 如何更新系统表</a> (2)</li><li>2010-10-22 -- <a href="https://www.dbainfo.net/oracle-view-table-physical-storage-size.htm" title="查看Oracle中表所有字段的字节总长度">查看Oracle中表所有字段的字节总长度</a> (0)</li><li>2010-09-16 -- <a href="https://www.dbainfo.net/java-connect-to-sqlserver-demo.htm" title="Java连接SQL Server数据库的一个简单例子">Java连接SQL Server数据库的一个简单例子</a> (0)</li><li>2010-09-06 -- <a href="https://www.dbainfo.net/sql-server-linked-server-summary.htm" title="SQL Server的链接服务器技术小结[转]">SQL Server的链接服务器技术小结[转]</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>https://www.dbainfo.net/sqlserver2005-get-datafile-located-disk-freespace.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
