2016-11-15 9 views
1

質問:私は、データベースインスタンスの各プロシージャ/トリガの人間が読み取り可能なファイルを見つけるかもしれないディスク上のどこかにありますか?ストアドプロシージャやその他のオブジェクトは、ディスク上のどこにありますか?

私のディスク上にはProgram Files\Microsoft SQL Server\がありますが、大部分は.dll/.rllファイルです。

私の会社は特定のVARCHAR(10)フィールドをVARCHAR(50)に増やすことを決めたため、このフィールドは350個以上のストアドプロシージャ/トリガーに現れます。そして、このフィールドの長さの増加を考慮して、これらのスクリプトのどれを変更する必要があるかを判断するのは私の仕事です。これらのファイルを解析してさまざまな正規表現にマッチするものを特定するためのスクリプトを書くことができれば幸いです。

+3

データベース自体です。 'syscomments'または' sys.sql_modules'を使います。 – shawnt00

答えて

3

shawnt00ストアドプロシージャ[SP]、関数、テーブル定義、等を述べたように、データベースファイルシステムで自身をしないファイルに格納されています。しかし、システムビューを使用して、SPまたはFunctionテキストを照会して、探している列/変数を検索することができます。

オブジェクトのテキスト定義がクリアテキストではなく暗号化されるため、このようなクエリからは返されないため、暗号化されるオブジェクトは例外です。

SELECT 
    SCHEMA_NAME(o.schema_id) as SchemaName 
    ,o.name AS ObjectName 
    ,o.type 
    ,o.type_desc 
    ,m.definition as ObjectText 
FROM 
    sys.sql_modules m 
    INNER JOIN sys.objects o 
    ON m.object_id = o.object_id 
WHERE 
    m.definition LIKE '%VARCHAR(10)%' 
+1

さて、 'sys.sql_modules'を使用して、関心のあるスクリプトを特定しましたが、' definition'カラムには正確に何が含まれているのか分かりませんでした。それをさらに見て、私は今理解しています。私は自分のコードからそのクエリを実行し、結果を繰り返し処理して、そのような手順を解析することができます。ありがとう。 – sab669

+0

幸運にも、350+はとても楽しいように聞こえませんが、そこに行っています:) – Matt

関連する問題