2009-09-18 8 views
6

ストアドプロシージャ、ビュー、関数などによってSQLサーバで使用されていないテーブルを見つけるためのt-sqlスクリプトはありますか?それ以上でなく、削除する前に100sのテーブルを持つデータベースがあります。テーブルには、データベース内の各オブジェクトを通過できるスクリプトがあるかどうかを知りたかったので、使用中のテーブルがあるかどうかを教えてください。ストアドプロシージャ、ビュー、関数などで使用されていないテーブルを見つけるtsqlスクリプト?

+0

「使用されていない」テーブルは何ですか?あなたは空のテーブルを意味しますか? –

+0

いいえ、私はストアドプロシージャ、ビュー、関数などで使用されていないテーブルを意味します。私は以前にデータベースを作成したと仮定し、100sのテーブルを持っているものもあれば廃止されたものもあります。テーブルを落とし始めると、私は彼らが使用中であるかどうかを知りたい。私はこの質問が投票された理由を理解できませんが、非常に有効で分かりやすい質問のようです。 – Xaisoft

+0

タイトルを「T-SQLスクリプトに変更して、ストアドプロシージャ、ビュー、および関数で参照されていないテーブルを見つけることができます。 – shufler

答えて

8

スクリプトを使用する場合は、here (Listing SQL Server Object Dependencies)は、依存関係をスクリプト化する方法の非常に良い記事です。これを使用して、参照されているテーブルのリストを作成できます。あなたのデータベースにあるテーブルのリストがあるので、どのテーブルが使用されていないのか分かります。

記事では、

sp_depends
ストアドプロシージャを使用しています。しかし、それは1つの失敗があります。たとえば、テーブル "MyTable"を使用するストアドプロシージャがあり、テーブル "MyTable"を作成する前にプロシージャを作成すると、依存関係の一覧には表示されません。そのため、テーブル
syscomments
を検索して依存関係を見つける必要があります。しかし、これは正確ではありません。なぜなら、コメントの中にテーブルの名前があれば、それを依存関係として扱うからです。

4

管理スタジオを使用している場合は、テーブルを右クリックして「依存関係を表示」することができます。

そして、ここで私は推測しているTSQLでこれを行う方法についての記事へのリンクは、あなたが探しているものである:

https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=277

あなたは常に一時テーブルを構築することができ依存関係のあるすべてのテーブルと/ varを比較し、それをすべてのテーブルと比較して、依存関係のないものを確認します。

8

私が知る限り、SQL Serverの依存関係管理に本当に頼ることはできません。ルーカスは多くの問題の1つを指摘した。

2005年には、古いsyscommentsテーブルと同等のものがsys.sql_modulesです。

select t.name, sys.objects.name foundin, sys.objects.type_desc 
from sys.objects t 
left outer join 
    sys.sql_modules 
    inner join sys.objects on sys.objects.object_id = sys.sql_modules.object_id 
on sys.sql_modules.definition like '%' + t.name + '%' 
where t.type = 'U' 
and sys.objects.name is null 
order by t.name, type_desc, foundin 

あなたはIS NULL条件を持つ行をコメントアウトした場合、あなたはすべてを見つける:、TSQLコードで(ビュー、SPS、機能)を発生しない、すべてのテーブル名を検索この文を使用するには

TSQLコードのすべてのテーブル名の出現。 (テーブル名がそのテーブルを実際に参照しているかどうかに関係なく)

+0

これを試してみて、それがどのように動作するかを教えてください。 – Xaisoft

+0

+1私は、ビュー/プロシージャ内でテーブル参照を見つける方法を探していましたが、これを少し修正すれば完全にうまくいきます。 –

+0

これはストアドプロシージャではうまくいきますが、t.type = 'U'制約をt.type IN( 'U'、 'P')に緩和する必要があります – Roman

関連する問題