本人需要查询数据库中各个数据表大小,看到一个系统存储过程sp_MSforeachtable讲解
(http://hi.baidu.com/realknow/blog/item/b37f1f3b1979b2ef14cecbd2.html)
举例查询:
EXEC sp_MSforeachtable @command1="print '?'",
@command2="sp_spaceused '?'",
@command3= "SELECT count(*) FROM ? "请问参数中的问号“ ? ”是什么意思? 能否详细讲解下上面语句的语法结构和执行过程?感激
(http://hi.baidu.com/realknow/blog/item/b37f1f3b1979b2ef14cecbd2.html)
举例查询:
EXEC sp_MSforeachtable @command1="print '?'",
@command2="sp_spaceused '?'",
@command3= "SELECT count(*) FROM ? "请问参数中的问号“ ? ”是什么意思? 能否详细讲解下上面语句的语法结构和执行过程?感激
exec sp_msforeachtable @command1='print ''?'' dbcc checktable (''?'')'直接运行即可,如果时间较长,随时可以取消,然后看结果。
exec sp_msforeachtable @command1='print ''?'''你还是先运行这个吧,一看结果就明白了。
那还有一点,请问既然问号代表所有的表 为何无法单独运行
command中引用的参数“exec sp_spaceused '?' ”呢?
例如
exec sp_spaceused 'tablename'
print 'tablename'把单一表名 变成? 放入sp_msforeachtable 的变量参数里面就循环执行可以了。
mssql里sp_MSforeachtable的用法在master数据库里执行下面的语句可以看到proc详细的代码
use master
exec sp_helptext sp_MSforeachtable;sp_MSforeachtable系统存储过程有7个参数,解释如下:@command1 nvarchar(2000), --第一条运行的T-SQL指令
@replacechar nchar(1) = N'?', --指定的占位符号
@command2 nvarchar(2000)= null,--第二条运行的T-SQL指令
@command3 nvarchar(2000)= null, --第三条运行的T-SQL指令
@whereand nvarchar(2000)= null, --可选条件来选择表
@precommand nvarchar(2000)= null, --在表前执行的指令
@postcommand nvarchar(2000)= null --在表后执行的指令 mssql里sp_MSforeachtable的用法
--统计数据库里每个表的详细情况:exec sp_MSforeachtable @command1="sp_spaceused '?'"--查询数据库所有表的记录总数
CREATE TABLE #temp (TableName VARCHAR (255), RowCnt INT)
EXEC sp_MSforeachtable 'INSERT INTO #temp SELECT ''?'', COUNT(*) FROM ?'
SELECT TableName, RowCnt FROM #temp ORDER BY TableName
DROP TABLE #temp
--检查数据库里每个表或索引视图的数据、索引及text、ntext 和image 页的完整性--下列语句需在单用户模式下执行(sp_dboption 'db_name', 'single user', 'true'),将true改成false就又变成多用户了exec sp_msforeachtable "dbcc checktable('?',repair_rebuild)"