2016-12-19 3 views
0

私は、引数としてデータベース名をとり、そのデータベース名を使用してテーブル、ビュー、トリガーなどのオブジェクトを参照するプロシージャを持っています。辞書はこれらの情報を見つけるのに役立ちますか?特定のデータベースのオブジェクトを取得する方法は?

注:私はSELECT * FROM sys.objを使用しようとしましたが、それは私にすべてのデータベースのオブジェクト全体を与えます。 具体的なデータベースに制限する方法

+1

動的SQLを使用する必要があります。また、動的SQLの一部としてデータベース名を含める必要があります。 "Select * from + @DBName +" .sys.objects ... " –

+0

この回答が変更されると、あなたは次のようになるはずです:http://stackoverflow.com/a/18462734/2095534 –

答えて

0

で述べたのと同じステートメントを実行しました。それから私は接続されているオブジェクトだけを取得しています。したがって、特定のデータベースに接続するには、単にUSEを追加してください。 sys.objectsテーブルにヒットします。

だからあなたのSPが

GO 
CREATE PROCEDURE PROC_GETALLOBJ 
(
@DB_NAME VARCHAR(20) 
) 
AS 
BEGIN 
    DECLARE @QRY VARCHAR(MAX); 

    SELECT @QRY = ' 
    USE ' [email protected]_NAME+' 

    SELECT * FROM SYS.objects WHERE [TYPE] NOT IN (''SQ'',''S'',''IT'')' 

    EXEC (@QRY) 

END 
GO 

ようになります私はNOT INとタイプSQ,S,ITのある行を削除しました。あなたがそれらを必要としないかもしれないので。

説明のあるタイプのリストを確認してください。

TR --trigger

SQ --SERVICE_QUEUE

FN --SQL_SCALAR_FUNCTION

S --SYSTEM_TABLE

D --DEFAULT_CONSTRAINT

IT --INTERNAL_TABLE

F --FOREIGN_KEY_CONSTRAINT

PK --PRIMARY_KEY_CONSTRAINT

P --SQL_STORED_PROCEDURE

U --USER_TABLE

TF --SQL_TABLE_VALUED_FUNCTION

UQ --UNIQUE_CONSTRAINT

V - ビュー

関連する問題