zoukankan      html  css  js  c++  java
  • mssql里sp_MSforeachtable和sp_MSforeachdb的用法

    当SQLServer数据库越来越庞大,而其中的表有非常多的时候,想要知道到底是哪些表最耗存储空间,到底该怎样统计各个表的存储大小呢?其实SQLServer提供了一个sp_spaceused的系统存储过程可以实现该功能,下面就是调用的SQL:

    create   table   #tb(表名   sysname,记录数   int  
      ,保留空间   varchar(10),使用空间   varchar(10)  
      ,索引使用空间   varchar(10),未用空间   varchar(10))  
       
      insert   into   #tb   exec   sp_MSForEachTable   'EXEC   sp_spaceused   ''?'''  
       
      select   *   from   #tb  
       
      go  
      drop   table   #tb  

    这样就可以枚举出每个表存储空间的详细使用情况!

    exec sp_Msforeachtable 'select 1 from ? where 1=2'

    mssql里sp_MSforeachtable和sp_MSforeachdb的用法

    mssql6.5开始微软提供了两个不公开,非常有用的系统存储过程sp_MSforeachtablesp_MSforeachdb,用于遍历某个数据库的每个表和遍历DBMS管理下的每个数据库。

    我们在master数据库里执行下面的语句可以看到两个proc详细的代码

    use master

    exec sp_helptext sp_MSforeachtable

    exec sp_helptext sp_Msforeachdb


    sp_MSforeachtable系统存储过程有7个参数,解释如下:

    @command1 nvarchar2000,  --第一条运行的T-SQL指令

    @replacechar nchar1 = N'?',   --指定的占位符号

    @command2 nvarchar2000= null,--第二条运行的T-SQL指令

    @command3 nvarchar2000= null, --第三条运行的T-SQL指令

    @whereand nvarchar2000= null, --可选条件来选择表

    @precommand nvarchar2000= null, --在表前执行的指令

    @postcommand nvarchar2000= null --在表后执行的指令 



    sp_MSforeachdb
    除了@whereand外,和sp_MSforeachtable的参数是一样的。



    --
    我们来看看sp_MSforeachtable的用法(sp_MSforeachdb的用法类似):

    --统计数据库里每个表的详细情况:

    exec sp_MSforeachtable @command1="sp_spaceused '?'"

     

    --检查数据库里每个表或索引视图的数据、索引及textntext image 页的完整性

    --下列语句需在单用户模式下执行(sp_dboption 'db_name', 'single user', 'true',true改成false就又变成多用户了

    exec sp_msforeachtable "dbcc checktable('?',repair_rebuild)"

  • 相关阅读:
    网络-路由交换-IPv4-Cisco-协议概要
    网络-路由交换-IPv4-Cisco-协议基础
    网络-路由交换-网络安全-华为-ACL分类
    泰克-OSPF
    网络-路由交换-网络安全-华为-DHCP基础
    不同系统下的数据参考
    model一定是和数据库表对应的么?
    NUnit属性-百度Nunit-Gui
    NUnit属性
    NUnit详细使用方法
  • 原文地址:https://www.cnblogs.com/renyb/p/2515074.html
Copyright © 2011-2022 走看看