Sp_MSforeachtableシステムが使用するための手順と命令を格納しsp_MSforeachdb

1.はじめに:
DBAは、多くの場合、例えば、すべてのユーザーデータベースやテーブルをチェックする必要があるとして:すべてのデータベースの容量を確認し、すべてのユーザ・テーブルのデータベースを指定された容量を見て、すべてのテーブルのレコード数が...我々は、一般的にこの問題に対処します別に例えば、カーソルを用いて処理を扱っている:データベースの検索効率が非常に遅いとき、我々はすべてのユーザーテーブル用のデータベースを確認したい、私たちは、カーソルを書くことで要件を満たさなければならない。我々はsp_MSforeachtableは、同じ目的を達成するために非常に簡単にすることができた場合:

EXEC sp_MSforeachtable @ Command1を= " 印刷 ' '  DBCC CHECKTABLE(' ')"

 

 

 


システムストアドプロシージャsp_MSforeachtableとsp_MSforeachdbは、マイクロソフト、開始からmssql6.5によって提供されるオープン2つのストアドプロシージャではありません。SQL Serverののmasterデータベースに保存されています。これについては、後で詳しく説明するSQL Serverまたはデータベース内のすべてのテーブル、上のすべてのデータベースを管理するために使用することができます。

【0002】パラメータ:
- @ 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)=ヌル、 -前の操作命令(プリトリガー同様の動作制御)に
@postcommand NVARCHAR(2000)= NULL - (制御と同様、トリガ動作の後)の動作命令実行後の

パラメータsp_MSforeachtable後、sp_MSforeachdbありませんパラメータ@whereand含む

使用の3例:
-各テーブルの統計データベースの詳細は:

EXEC sp_MSforeachtable @ Command1を= "sp_spaceusedを' ' "

 

 

 

- 取得し、各テーブル番号の容量を記録します。

EXEC sp_MSforeachtable @ Command1を= " 印刷 ' ' "、
 @コマンド2 = "sp_spaceusedを' ' "、
 @ COMMAND3 = " SELECT  *FROM?"

 


 

 


-データベースのすべてのストレージスペースを取得します:
EXEC sp_MSforeachdb @ Command1を= " '?'印刷"、
@コマンド2 = "sp_spaceusedを"

-すべてのデータベースチェック
EXEC sp_MSforeachdb @ Command1を= " '?'印刷"、
@コマンド2 = " CHECKDB DBCC "(?)

- PUBSデータベースの更新は、統計表の先頭をすべてのトンを持っている:
EXEC sp_MSForEachTable whereand = @"と名'%T' "のような
@replacechar = '*'、
@ PRECOMMAND ="印刷「更新.....統計印刷『』「
@のCommand1 =」印刷『*』 *更新統計「
@ POSTCOMMAND =」print''print 『完全な統計情報の更新を!』」

-現在のデータベーステーブル内のすべてのデータを削除
@ Command1を= sp_MSForEachTable '?から削除'
sp_MSForEachTable @ Command1を= "TRUNCATE TABLEの?"

4.パラメータ@whereand使用法:


貯蔵条件中@whereand命令パラメータ関数は、特定の文言は、次のように
@whereend、その書き込みに@ whereand =「AND o.nameで( 」「」 『表2は、』「.......「表1」)」
例えば:私はNOTE欄に表1 /表2 /表3を更新したいですNULL値
sp_MSforeachtable @ Command1を= 'アップデート?設定 NOTE =' '' 'NOTEがNULLである場合は'、@ whereand = 'AND(' '表1' '' '表2' '' '表3'内のo.name 「)」

5「?」2つの強力なストアドプロシージャを作成し、ストアドプロシージャの特殊な使用インチ

の「?」ここで役割、WINDOWS内のファイルのためのGoogleの検索下のDOSコマンドの同等、およびワイルドカード効果。

6.まとめ


我々はあなた自身のsp_MSforeachObject :(投稿を構築することができます上記の分析では、)
USE MASTER
GO
CREATE PROC sp_MSforeachObject
@objectType int型= 1、
@ Command1をNVARCHAR(2000)、
@replacechar NCHAR(1)= N '?'、
command2のデータ型はnvarchar @(2000)=ヌル、
@ COMMAND3のnvarchar(2000)= nullを、


@postcommand NVARCHAR(2000)= NULL
として
各テーブルは、そのデフォルト設定に各テーブルの/ *このprocが返す1つ以上の行(必要に応じて、一致@Where)、
自身の結果セット* /
/ * @precommandと@postcommand使用することができます一時テーブルを介して単一の結果セットを強制します。* /
/ *プリプロセッサは、引用符で置き換えることはありませんので、strのを(使用する必要があります)。* /
宣言@mscatのデータ型はnvarchar(12)
@mscat = LTRIM(STR(変換(整数、0×0002)))を選択
の場合(@precommand nullではない)
のexec(@precommand)
オブジェクト・タイプ* /保存用/ *定義@isobject
宣言を@isobject VARCHAR(256)
ときに1、次いで'IsUserTable' @ ISOBJECT =ケース@objectTypeを選択
2、次いで'IsView'
3、次いで'IsTrigger'
場合4次いで「IsProcedure」
5、次いで「のIsDefault」
6、次いで「IsForeignKeyこの」
7、次いで「IsScalarFunction」
8、次いで「IsInlineFunction」
9次いで「IsPrimaryKey」
10、次いで「IsExtendedProc」
11、次いで「IsReplProc」
12その後、 'IsRule'
エンド
/ *選択* /作成
/ *使用しIsUserTable文字列の変数isstead * / @isobject
選択のためのグローバルカーソルEXEC(N'declare hCForEachを'' [ '' + REPLACE(USER_NAME(UID)、N '' ] ''、N ''] '')+ ''] '' + '。 '' + ''[ '' +
REPLACE(OBJECT_NAME(ID)、N ''] ''、N ''] '')+ ''] '' O dbo.sysobjectsから'
'ここOBJECTPROPERTY(o.id、N '' '+ @ ISOBJECT +' '')= 1 '+ N'とo.category& '+ @mscat + N' = 0 + N 「
+ @whereand)
@ RETVAL int型DECLARE
SELECT @@ @ RETVALエラー=
IF(@ RETVAL = 0)
Execの= sp_MSforeach_worker @ @ RETVAL Command1を、@replacechar、コマンド2 @、@ COMMAND3
(RETVAL IS = 0と@postcommandないヌル@)IF
Execの(@ POSTCOMMAND)
RETVAL @リターン
GO

私たちがテストを持っているので、:
-すべてのスクリプト、ストアドプロシージャを取得:
" '?' sp_helptextを" EXEC sp_MSforeachObject @ Command1を=、= @ objectTypeに4を
-すべてのスクリプトのビューを取得:
EXEC sp_MSforeachObject @ = Command1を「sp_helptextを『?』」、@のobjectType = 2
-例えば、開発プロセスでは、いないユーザーはそれほど実際のデータベースにDBOに変更するために、独自のオブジェクト所有者は、次のとおりです。
EXEC sp_MSforeachObject @ Command1を=「sp_changeobjectownerを'?'、 'DBO' "objectTypeに@ 1 =
EXEC sp_MSforeachObject @ Command1を=" sp_changeobjectownerを'?'、 'DBO'」、@のobjectType = 2
EXEC sp_MSforeachObject @ Command1を= "sp_changeobjectownerを'?'、 'DBO'"、@のobjectType = 3
EXEC sp_MSforeachObject @ Command1を= "sp_changeobjectownerを'?'、 'DBO'"、@のobjectType = 4
これは、すべてのデータベース・オブジェクトに非常に便利になります代わりに、DBO。

おすすめ

転載: www.cnblogs.com/Siegel/p/12596320.html