`
isiqi
  • 浏览: 16483138 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

关于sql中的 sp_MSforeachtable和sp_MSforeachdb

阅读更多

1.参数说明:
@command1 nvarchar(2000), --第一条运行的SQL指令
@replacechar nchar(1) = N'?', --指定的占位符号
@command2 nvarchar(2000)= null, --第二条运行的SQL指令
@command3 nvarchar(2000)= null, --第三条运行的SQL指令
@whereand nvarchar(2000)= null, --可选条件来选择表
@precommand nvarchar(2000)= null, --执行指令前的操作(类似控件的触发前的操作)
@postcommand nvarchar(2000)= null --执行指令后的操作(类似控件的触发后的操作)

以后为sp_MSforeachtable的参数,sp_MSforeachdb不包括参数@whereand

2.参数@whereand的用法:

@whereand参数在存储过程中起到指令条件限制的作用,具体的写法如下:
@whereend,可以这么写 @whereand=' AND o.name in (''Table1'',''Table2'',.......)'
例如:我想更新Table1/Table2/Table3中NOTE列为NULL的值
sp_MSforeachtable @command1='Update ? Set NOTE='''' Where NOTE is NULL',@whereand=' AND o.name in (''Table1'',''Table2'',''Table3'')'

3."?"在存储过程的特殊用法,造就了这两个功能强大的存储过程.

这里"?"的作用,相当于DOS命令中、以及我们在WINDOWS下搜索文件时的通配符的作用。

4.使用举例:

--删除当前数据库里的所有空表:
EXEC sp_msforeachtable "if not exists(select 1 from ?) drop table ? "

--统计数据库里每个表的详细情况:
EXEC sp_MSforeachtable @command1="sp_spaceused '?'"

--获得每个表的记录数和容量:
EXEC sp_MSforeachtable @command1="print '?'",
@command2="sp_spaceused '?'",
@command3= "SELECT count(*) FROM ? "

--获得所有的数据库的存储空间:
EXEC sp_MSforeachdb @command1="print '?'",
@command2="sp_spaceused "

--检查所有的数据库
EXEC sp_MSforeachdb @command1="print '?'",
@command2="DBCC CHECKDB (?) "

--更新PUBS数据库中已t开头的所有表的统计:
EXEC sp_MSforeachtable @whereand="and name like 't%'",
@replacechar='*',
@precommand="print 'Updating Statistics.....' print ''",
@command1="print '*' update statistics * ",
@postcommand= "print''print 'Complete Update Statistics!'"

--删除当前数据库所有表中的数据
sp_MSforeachtable @command1='Delete from ?'
sp_MSforeachtable @command1 = "TRUNCATE TABLE ?"

分享到:
评论

相关推荐

    系统存储过程sp_MSforeachtable和sp_MSforeachdb使用说明

    系统存储过程`sp_MSforeachtable`和`sp_MSforeachdb`是SQL Server中非常实用的工具,主要用于批量处理数据库中的表或所有数据库。这两个存储过程是Microsoft SQL Server自6.5版本以来内置的非公开存储过程,它们位于...

    浅析SQL SERVER一个没有公开的存储过程

    SQL Server中的`sp_MSforeachtable`是一个非常实用但未公开的系统存储过程,它允许DBA(数据库管理员)执行对所有用户表或特定表的批量操作,极大地简化了数据库维护和管理的工作。这个存储过程从SQL Server 6.5版本...

    Sql Server中清空所有数据表中的记录

    Sql Server中清空所有数据表中的记录 清空所有数据表中的记录: 代码如下:exec sp_msforeachtable @Command1 =’truncate table ?’ 删除所有数据表: 代码如下:exec sp_msforeachtable ‘delete N”?”’ 清空...

    SqlServer删除所有表数据语句

    在 Sql Server 中,排序规则是用于确定数据如何排序、比较和存储的规则。我们可以使用以下语句来配置排序规则: ```sql EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE UPDATE dbo.syscolumns SET ...

    如何对SQL数据表和数据库进行迭代操作

    本文主要讨论了两个不常出现在SQL Server在线教科书中的系统存储过程:`sp_MSForEachDB`和`sp_MSForEachTable`,它们能帮助我们更加便捷地处理数据库的管理和维护任务。 `sp_MSForEachDB`是用于迭代服务器上所有...

    SQL2005遍历系统所有表及库的存储过程

    本文中提到的两个存储过程`sp_MSforeachtable`和一个自定义过程都是用于遍历数据库或表并执行特定操作的有效手段。 ### `sp_MSforeachtable` `sp_MSforeachtable`是SQL Server提供的一种非官方系统存储过程,它...

    批量更改数据库表的所有者

    需要注意的是,虽然`sp_MSforeachtable`提供了极大的便利性,但其是非文档化的特性意味着它可能在未来的SQL Server版本中不再可用。因此,在生产环境中使用时应格外小心,并考虑是否有其他更为官方支持的方法可以...

    SQL Server数据表和数据库

    本文介绍了master数据库中两个非常有用的存储过程:sp_MSForEachDB和sp_MSForEachTable。

    使用SQL语句清空数据库所有表的数据.docx

    然而,由于`sp_msforeachtable`是非标准的扩展存储过程,微软并不建议在生产环境中广泛使用,因为它可能在未来的SQL Server版本中被弃用。 总结来说,清空数据库所有表数据的SQL方法主要有三种:直接拼接字符串执行...

    查看MSSQL数据库每个表占用的空间大小.docx

    在SQL Server中,了解表的空间占用有助于优化数据库性能和规划存储需求。通过监控表的大小,可以识别可能需要进行碎片整理的表,或者发现可能需要压缩的大型表。此外,对于数据库的容量规划和日常维护,这种信息至关...

    SQL清空所有表

    为了批量清空所有表,可以使用存储过程`sp_msforeachtable`,这是一个非常强大的工具,能够遍历数据库中的所有表,并对每个表执行指定的操作。 下面是一个使用`sp_msforeachtable`来批量清空所有表的例子: ```sql...

    SQLServer修改表所有者.pdf

    总之,`sp_changeobjectowner`是一个强大的工具,用于管理和调整SQL Server数据库中对象的所有权。正确使用它可以确保数据库的权限结构符合管理需求,但同时也需要谨慎操作,以免无意中破坏权限设置。

    SQL Server将数据导出SQL脚本的方法

    但请注意,`sp_msforeachtable`不是官方支持的,可能在未来的SQL Server版本中被移除。 下面是一个使用`sp_msforeachtable`的示例: ```sql DECLARE @TableName NVARCHAR(255) DECLARE @SQLCommand NVARCHAR(MAX) ...

    使用SQL语句清空数据库所有表的数据.pdf

    微软提供了一个未公开的存储过程`sp_msforeachtable`,可以用于遍历数据库中的所有表并执行指定的操作。要清空所有表,你可以这样调用: ```sql EXEC sp_msforeachtable "TRUNCATE TABLE ?" ``` 这个方法的...

    Sql Server强制清空所有数据表中的记录.docx

    标题 "Sql Server强制清空所有数据表中的记录" 涉及的是在SQL Server数据库中如何彻底删除所有数据表中的记录。以下是对这个主题的详细解释: 在SQL Server中,清空表通常意味着删除表中所有的行而不影响表结构。这...

    Sql Server强制清空所有数据表中的记录.pdf

    在SQL Server中,有时我们需要快速地清空所有数据表中的记录,这在数据库测试、数据迁移或数据分析等场景中很常见。然而,直接使用`DELETE`或`TRUNCATE`命令可能会因表间约束或触发器的存在而受限。在这种情况下,...

    一次性清空数据表sql

    需要注意的是,`sp_MSforeachtable`并不是SQL Server的标准存储过程,而是一个第三方提供的扩展存储过程,因此在使用之前需要确保其已经正确安装在数据库服务器上。 ### 总结 通过上述三种方法,我们可以有效地...

Global site tag (gtag.js) - Google Analytics