特定のテーブルに関連付けられているすべてのオブジェクトをプログラムでスクリプト化する方法はありますか?


9

私は、SQL管理スタジオで私は右表/トリガ/キーをクリックすることができることを知っているとscript object as...。オブジェクトの名前を指定して、これをプログラムで行う方法はありますか?

もしそうなら、与えられたテーブルに関連付けられたすべてのオブジェクト(主キー、外部キー、トリガー)を見つけ、それらすべてをプログラムでスクリプト化する方法はありますか?

回答:


5

これを始める方法は次のようになります:

DECLARE @TableName VARCHAR(50)
DECLARE @ObjectID INT
SET @TableName = '' -- the name of the objects you want to investigate

SELECT @ObjectID = [id]  FROM sysobjects WHERE name=@TableName

SELECT * FROM sysobjects WHERE name=@TableName
UNION
SELECT * FROM sysobjects WHERE id in (SELECT id FROM sysdepends WHERE depid= @ObjectID)

するsysdepends「テーブル」は、他に依存しているオブジェクトを教えてくれます。これは階層的であるため、nullの取得を開始するまでSysDependsを再帰的に実行する必要がある場合があります。sysdependsが不完全な場合があります他にいくつかの提案ある記事を次に示します。

SYSOBJECTS「表には、」あなたは、データベース内のオブジェクトに関するいくつかのものを教えてくれます。タイプ(またxtype)列は、アイテムが何であるかを示します:ユーザー定義テーブル、ストアドプロシージャ、トリガーなど。

次に、sp_helptextでストアドプロシージャのテキストを出力します。これは、暗号化されたストアドプロシージャのテキストを再現しません。

完全で完全なソリューションには、特に暗号化されたストアドプロシージャとトリガーが関係する場合に、何かのプログラミングが含まれます。プログラムでDB内のアイテムを決定する1つのサンプル記事。SQL Server 2000のストアドプロシージャを復号化するために必要なデータ型はSQL Server 2005に表示されたため、SQL Server 2000でSQLを使用して独自の暗号化されたストアドプロシージャを復号化できませんでした(ただし、SQL Server 2005のSQLでそれらを復号化することはできました)。同じことが2005年から2008年への移行に当てはまっても、驚かないでください。数年前、私はストアドプロシージャの解読に興味を失いました。


5

これは、C#でサーバー管理オブジェクトを使用する手法です。純粋なT-SQLでこれを行う方法はわかりません。


これに加えて、powershell2.0でも同じことができます
jcolebrand

3

オブジェクトをスクリプト化するために必要なすべての情報をプログラムで見つける方法を知っています。しかし、実際にスクリプトを作成するには、スクリプト生成コードを自分で作成する必要がある場合があります。

既存のオブジェクトのすべてを見つけるためのコードを書いている場合、googleを指す用語は「SQL Serverデータディクショナリ」です。

最初の例をいくつか紹介します。

特定のテーブルのすべての外部キー制約を見つけるには:

select * from information_schema.table_constraints where CONSTRAINT_TYPE = 'FOREIGN KEY'
and TABLE_NAME = 'aspnet_Roles'

特定のテーブルを参照するすべての外部キー制約を見つけるには:

select 
sys.foreign_keys.name as key_name,
pt.name as parent_table_name,
pc.name as parent_column_name,
ct.name as referenced_table_name,
cc.name as referenced_colum_name 
from sys.foreign_key_columns
inner join sys.foreign_keys on sys.foreign_key_columns.constraint_object_id = sys.foreign_keys.object_id
inner join sys.tables pt on sys.foreign_key_columns.parent_object_id = pt.object_id
inner join sys.tables ct on sys.foreign_key_columns.referenced_object_id = ct.object_id
inner join sys.columns pc on sys.foreign_key_columns.parent_object_id = pc.object_id and sys.foreign_key_columns.parent_column_id = pc.column_id
inner join sys.columns cc on sys.foreign_key_columns.referenced_object_id = cc.object_id and sys.foreign_key_columns.referenced_column_id = cc.Column_id
where ct.name = 'aspnet_Applications'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.