ついでに、シノニムとプロシージャとファンクションの定義情報の取得方法をメモメモ。
[シノニム]
USE AdventureWorks GO /* シノニムの定義を取得 */ SELECT DB_NAME() AS db_name ,SCHEMA_NAME(synonyms.schema_id) AS schema_name ,synonyms.name AS synonyms_name ,synonyms.base_object_name AS base_object_name FROM sys.synonyms synonyms ORDER BY db_name, schema_name, synonyms_name GO
[プロシージャ]
USE AdventureWorks GO /* プロシージャの定義を取得する */ SELECT DB_NAME() AS db_name ,SCHEMA_NAME(procedures.schema_id) AS schema_name ,procedures.name AS procedure_name ,modules.definition AS definition FROM sys.procedures procedures INNER JOIN sys.sql_modules modules ON procedures.object_id = modules.object_id ORDER BY db_name, schema_name, procedure_name GO
[ファンクション]
USE AdventureWorks GO /* ファンクションの定義を取得する */ SELECT DB_NAME() AS db_name ,SCHEMA_NAME(objs.schema_id) AS schema_name ,objs.name AS function_name ,modules.definition AS definition FROM sys.objects objs INNER JOIN sys.sql_modules modules ON objs.object_id = modules.object_id WHERE /* FN: SQL スカラ関数, FS: アセンブリ (CLR) スカラ関数, FT: アセンブリ (CLR) テーブル値関数, IF: SQL インライン テーブル値関数, TF: SQL テーブル値関数 を対象とする。 */ objs.type IN ('FN', 'FS', 'FT', 'IF', 'TF') ORDER BY db_name, schema_name, function_name GO
ファンクションの情報の取り方のみが変則パターンですね。
最初、どこに定義されているのか分りませんでしたw
でも、よくよく考えてみると、全部やろうと思えばsys.objectsから
取得できることに気づいた・・・。w typeで識別すればいいんですね〜。