sp_spaceused
  主题上次更新时间 -- 2004 年 1 月显示当前数据库中某个表的行数、由它保留和使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。语法
sp_spaceused [[@objname =] 'objname']
    [,[@updateusage =] 'updateusage']参数
[@objname =] 'objname'是为其请求空间使用信息的表的名称。objname 的数据类型是 nvarchar(776),默认设置为 NULL。[@updateusage =] 'updateusage'表示应在数据库内(未指定 objname 时)还是在特定的对象上(指定 objname 时)运行 DBCC UPDATEUSAGE。值可以是 true 或 false。updateusage 的数据类型是 varchar(5),默认设置为 FALSE。返回代码值
0(成功)或 1(失败)结果集
如果省略 objname,则针对当前数据库返回两个结果集。列名 数据类型 描述 
database_name varchar(128) 当前数据库的名称。 
database_size varchar(18) 当前数据库的大小。 
unallocated space varchar(18) 数据库中未保留用于数据库对象的空间。 列名 数据类型 描述 
reserved varchar(18) 保留的空间总量。 
data varchar(18) 数据使用的空间总量。 
index_size varchar(18) 索引使用的空间总量。 
unused varchar(18) 为数据库中的对象保留但尚未使用的空间总量。 
如果指定了 objname,则返回针对指定表的结果集。列名 数据类型 描述 
name nvarchar(128) 为其请求空间使用信息的表名。 
rows char(11) objname 表中现有的行数。 
reserved varchar(18) 为 objname 保留的空间总量。 
data varchar(18) objname 中的数据所使用的空间总量。 
index_size varchar(18) objname 中的索引所使用的空间总量。 
unused varchar(18) 为 objname 保留但尚未使用的空间总量。 
注释
sp_spaceused 计算数据和索引使用的磁盘空间量以及当前数据库中的表所使用的磁盘空间量。如果没有给定 objname,sp_spaceused 则报告整个当前数据库所使用的空间。当指定 updateusage 时,Microsoft® SQL Server™ 扫描数据库中的数据页,并就每个表使用的存储空间对 sysindexes 表作出任何必要的纠正。例如会出现这样一些情况:当除去索引后,表的 sysindexes 信息可能不是当前的。该进程在大表或数据库上可能要花一些时间运行。只有当怀疑所返回的值不正确,而且该进程对数据库中的其它用户或进程没有负面影响时,才应使用该进程。如果需要,可以单独运行 DBCC UPDATEUSAGE。权限
执行权限默认为 public 角色。只有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员可以指定 @updateusage 参数。示例
A. 有关表的空间信息
下例报告为 titles 表分配(保留)的空间量、数据使用的空间量、索引使用的空间量以及由数据库对象保留的未用空间量。USE pubs
EXEC sp_spaceused 'titles'B. 有关整个数据库的已更新空间信息
下例概括当前数据库使用的空间并使用可选参数 @updateusage。 USE pubs
sp_spaceused @updateusage = 'TRUE'

解决方案 »

  1.   

    to  zjcxc(邹建) :
    请问,我如何得到该函数结果集中的数据呢?因为我要用这个数据作为条件来进行下面的步骤。
      

  2.   

    --在前台中调用嘛
    rs.open "exec sp_spaceused",conn
      

  3.   

    麻烦你看看我这个怎么改
    USE pubs
    GODECLARE 
    @Freespace FLOAT(10)DECLARE Space_cursor CURSOR 
    FOR SELECT unallocated space FROM EXEC sp_spaceusedOPEN Space_cursorFETCH NEXT FROM Space_cursor
    INTO @Freespaceif (@Freespace<1)
    PRINT '空间不足!'
      

  4.   

    我的意思就是
    怎么把 unallocated space 送入 @Freespace中?
      

  5.   

    看了一些帖子之后,重新改写了,可仍然有错误,请大家帮我看看
    -----------------------------------
    USE pubs
    GOCREATE TABLE #tmp
    (
    database_name varchar(18),
    database_size     varchar(18),
    unallocated_space varchar(18)
    )INSERT INTO #tmp 
    EXEC sp_spaceusedDECLARE Freespace CURSOR
    FOR 
    SELECT database_name 
    FROM #tmpOPEN FreespaceFETCH NEXT FROM Freespace WHILE @@FETCH_STATUS=0
    BEGIN
    FETCH NEXT FROM Freespace
    ENDCLOSE Freespace
    DEALLOCATE Freespace
    GODROP TABLE #tmp
    GO服务器: 消息 213,级别 16,状态 7,过程 sp_spaceused,行 196
    插入错误: 列名或所提供值的数目与表定义不匹配。
    -----------------------------------
      

  6.   

    又有个问题:
    DDBC SHRINKDATABASE 的结果集又该如何来取呢?
      

  7.   

    辛苦各位了,我的问题已经基本解决,不过以下几个问题还望各位继续指点一二:
      1、使用sp_spaceused获取的只是data文件的大小及可用空间大小,如何获取log文件的呢?因为在使用的后期log文件的大小是很吓人的。
      2、若将data和log文件的大小定长,会对系统的运行有影响吗?
      3、将数据库设置为“自动压缩”,其执行操作的周期是多长时间?其执行时会将我原来的数据自动删除吗?
    这些在帮助里我没有查到:S,还望大家积极讨论,分数我会加分,或再开贴的,还望各位积极参与呀!!