已经知道使用sp_spaceused可以实现我的目的,可如何得到该函数结果集中的数据呢?因为我要用这个数据作为条件来进行下面的操作。
-----------------------------------------
结果集: 列名 数据类型 描述
database_name varchar(18) 当前数据库的名称。
database_size varchar(18) 当前数据库的大小。
unallocated space varchar(18) 数据库中未保留用于数据库对象的空间。 列名 数据类型 描述
reserved varchar(18) 保留的空间总量。
data varchar(18) 数据使用的空间总量。
index_size varchar(18) 索引使用的空间总量。
unused varchar(18) 为数据库中的对象保留但尚未使用的空间总量。
-----------------------------------------
结果集: 列名 数据类型 描述
database_name varchar(18) 当前数据库的名称。
database_size varchar(18) 当前数据库的大小。
unallocated space varchar(18) 数据库中未保留用于数据库对象的空间。 列名 数据类型 描述
reserved varchar(18) 保留的空间总量。
data varchar(18) 数据使用的空间总量。
index_size varchar(18) 索引使用的空间总量。
unused varchar(18) 为数据库中的对象保留但尚未使用的空间总量。
rs.open "exec sp_spaceused",conn
在特殊情况下,包含与数据库中的文件相对应的行。该表存储在 master 数据库中。列名 数据类型 描述
fileid smallint 每个数据库的唯一文件标识号。
groupid smallint 文件组标识号。
size int 文件大小(以 8 KB 页为单位)。(******)
maxsize int 最大文件大小(以 8 KB 页为单位)。0 值表示不增长,–1 值表示文件应一直增长到磁盘已满。
growth int 数据库的增长大小。0 值表示不增长。根据状态的值,可以是页数或文件大小的百分比。如果 status 为 0x100000,则 growth 是文件大小的百分比;否则是页数。
status int 仅限内部使用。
perf int 保留。
dbid smallint 该文件所属数据库的数据库标识号。
name nchar(128) 文件的逻辑名称。
filename nchar(260) 物理设备的名称,包括文件的完整路径。
我想要的是制定数据库中还剩余的空间,而在sysaltfiles表中存放的是总空间,所以你的方法不适用,不过还是要谢谢你。
------------------------------------------------------------------
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 '空间不足!'
------------------------------------------------------------------
我的意思就是 怎么把 unallocated space 送入 @Freespace中?
-----------------------------------
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
插入错误: 列名或所提供值的数目与表定义不匹配。
-----------------------------------
size int 文件大小(以 8 KB 页为单位)。(******)
maxsize int 最大文件大小(以 8 KB 页为单位)。0 值表示不增长,–1 值表示文件应一直增长到磁盘已满。
growth int 数据库的增长大小。0 值表示不增长。根据状态的值,可以是页数或文件大小的百分比。如果 status 为 0x100000,则 growth 是文件大小的百分比;否则是页数。
你指定maxsize。数据库中还剩余的空间=maxsize*8kb-size*8kb
DECLARE @logsize int
DECLARE @bytesperpage int
DECLARE @dbsize int
DECLARE @pagesperMB intselect @dbsize=sum(convert(dec(15),size))
from dbo.sysfiles where (status & 64 = 0) select @logsize=sum(convert(dec(15),size))
from dbo.sysfiles where (status & 64 <> 0) select @bytesperpage = low
from master.dbo.spt_values where number = 1 and type = 'E' select @pagesperMB = 1048576 / @bytesperpageselect database_name = db_name(),
database_size = ltrim(str((@dbsize + @logsize) / @pagesperMB,15,2) + ' MB'),
'unallocated space' = ltrim(str((@dbsize -
(select sum(convert(dec(15),reserved))
from sysindexes where indid in (0,1,255)))/
@pagesperMB,15,2)+ ' MB') ------------------------------------------------
database_name database_size unallocated space
------------- -------------- ------------------
pubs 4.00 MB 1.02 MB
-------------------------------------------------------你去试试!写进存储过程。
不错,不错,赞一个。
1、使用sp_spaceused获取的只是data文件的大小及可用空间大小,如何获取log文件的呢?因为在使用的后期log文件的大小是很吓人的。
2、若将data和log文件的大小定长,会对系统的运行有影响吗?
3、将数据库设置为“自动压缩”,其执行操作的周期是多长时间?其执行时会将我原来的数据自动删除吗?
这些在帮助里我没有查到:S,还望大家积极讨论,分数我会加分,或再开贴的,还望各位积极参与呀!!