如何在 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 语句的输出的主要内容,如果未能解决你的问题,请参考以下文章
MySQL学习随笔--通过实例理解merge ,temptable算法的差异