sp_Msforeachtable与sp_Msforeachdb简介

网络上关于这两个存储过程的文章比较多,大致都是说明他们是微软未公开/未正式发布的众多的存储过程中的两个,我也稍微查了一下为什么微软没有公开,其中有说可能存在内存溢出的风险,事实上是平时工作中为了尽快解决问题,对我而言,不太care,我觉得既然微软自己在用,网络上各路高手也都在用,那我偶尔用一下应该不大会出问题。

我在上周的文章 SQL Server获取数据库下所有的表名和字段名 中介绍了通过游标(SQL Server游标的简单使用 )获取数据库所有的表名和字段名,最后的代码中因为我使用的系统提供的视图查出的表中出现了很多系统表,我也没办法排除系统表,就用了本文标题中的 sp_Msforeachtable 存储过程替代了我自己写的游标。今天查看了 sp_Msforeachtable 这个存储过程的具体代码发现,这个存储过程也使用了游标,而当时查出很多系统表其实是我查错视图了,正确的视图应该是sys.tables,确认了一下结果也是一致的。


sp_Msforeachtable



sp_MSforeachtable的参数:

@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_MSforeachdb的参数:

@command1 nvarchar(2000)

@replacechar nchar(1)

@command2 nvarchar(2000)

@command3 nvarchar(2000)

@precommand nvarchar(2000)

@postcommand nvarchar(2000)

sp_MSforeachdb的参数比sp_MSforeachtable的参数少一个@whereand

我这里只提供一种最简单的用法,把表名和数据库名打印出来

EXEC sp_MSforeachtable 'print ''?'''

EXEC sp_Msforeachdb 'print ''?'''

sys.tables或sp_Msforeachtable都会查出数据库关系图对应的系统表sysdiagrams,暂时还没找到什么好办法,只能在结果中排除这个表名,如看到本文的朋友有更好的方法,希望能给我评论留言。


补充说明一下,我这篇文章只针对SQL Server,所有自己写的文章主要也是为了自己做一下记录,方便以后需要时查找使用,同时也可以分享给需要的同行参考。如有不妥,或更好的方法,望不吝赐教,友好探讨,轻拍。未特别标明转载均为本人原创整理,码字不易,转载或引用时希望可以标明出处,谢谢。

展开阅读全文

页面更新:2024-04-10

标签:游标   微软   视图   控件   指令   参数   操作   数据库   简介   系统   文章

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top