如何在 temptable 中捕获 DBCC 语句的输出

Posted

技术标签:

【中文标题】如何在 temptable 中捕获 DBCC 语句的输出【英文标题】:How to catch the output of a DBCC-Statement in a temptable 【发布时间】:2011-08-22 06:05:54 【问题描述】:

我在 SQL-Server 上尝试了以下操作:

create table #TmpLOGSPACE(
  DatabaseName varchar(100)
  , LOGSIZE_MB decimal(18, 9)
  , LOGSPACE_USED decimal(18, 9)
  ,  LOGSTATUS decimal(18, 9)) 

insert #TmpLOGSPACE(DatabaseName, LOGSIZE_MB, LOGSPACE_USED, LOGSTATUS) 
DBCC SQLPERF(LOGSPACE);

...但这会引发语法错误...

有什么建议吗?

【问题讨论】:

【参考方案1】:

将要运行的语句放入EXEC('')

insert #TmpLOGSPACE(DatabaseName, LOGSIZE_MB, LOGSPACE_USED, LOGSTATUS) 
EXEC('DBCC SQLPERF(LOGSPACE);')

【讨论】:

【参考方案2】:

这并没有直接回答问题,但确实回答了问题的意图:大概,您想要一种简单的方法来查找日志文件的当前大小:

SELECT size*8192.0/1024.0/1024.0 as SizeMegabytes 
FROM sys.database_files
WHERE type_desc = 'LOG'
-- If the log file size is 100 megabytes, returns "100".

我们乘以 8192 的原因是 SQL server 中的页面大小是 8192 字节。

我们除以 1024,然后再除以 1024 的原因是将大小从字节转换为兆字节。

【讨论】:

以上是关于如何在 temptable 中捕获 DBCC 语句的输出的主要内容,如果未能解决你的问题,请参考以下文章

(4.11)DBCC 常用命令

收缩数据库 DBCC SHRINKFILE

MySQL学习随笔--通过实例理解merge ,temptable算法的差异

数据库置疑之后修复完,用 dbcc checkdb(数据库名) 检查数据的时候提示有一致性错误

如何从 TempTable 中检索值并在局部变量中设置该值

MSSQL 和 JDBC 读取 DBCC USEROPTIONS