SQL Server 2005データベースのテーブルsynonymから列のメタデータを確認するにはどうすればよいですか?私は 'Project'と呼ばれるテーブルのための 'ProjectSyn'という同義語を持っていますが、同義語のカラムメタデータは見つかりません。テーブルのシノニムから列のメタデータを取得する方法
私の推測では、シノニムの「ベーステーブル」を決定し、そのテーブルの列メタデータをクエリします。これは正しいアプローチですか、そうでない場合はどうなりますか?
SQL Server 2005データベースのテーブルsynonymから列のメタデータを確認するにはどうすればよいですか?私は 'Project'と呼ばれるテーブルのための 'ProjectSyn'という同義語を持っていますが、同義語のカラムメタデータは見つかりません。テーブルのシノニムから列のメタデータを取得する方法
私の推測では、シノニムの「ベーステーブル」を決定し、そのテーブルの列メタデータをクエリします。これは正しいアプローチですか、そうでない場合はどうなりますか?
を照会、シノニムのベース・オブジェクト名を取得するには? (編集済み)
select c.*
from
sys.columns c
inner join sys.synonyms s on c.object_id = object_id(s.base_object_name)
where
s.name = 'ProjectSyn'
ありがとう@ジョナスが、あなたのコードは少し仕事が必要です。 OBJECT_NAME関数は、base_object_nameが完全修飾された非修飾名を与えます。 – ProfK
もちろん、シノニムが同じサーバー上の別のデータベースのオブジェクト、またはリンクされたサーバー上のオブジェクトの場合は、何も返しません。また、同義語が '[ProjectSyn]'のように角括弧で作成されている場合、base_object_name列にも含まれている必要があることにも注意してください。 – ErikE
@ErikE apcの答えは、大カッコと一致することなく、データベース間およびリンクされたサーバーでも機能します。 – Arkaine55
はい、私は基本オブジェクトを取得し、列を取得すると思いますが、あなたの唯一のオプションです。
はちょうどこのような何かビューsys.synonyms
これは、異なるデータベースの同義語で動作する私のソリューションです:
SELECT TOP 0 * INTO #TEMP1 FROM YourTable
SELECT
[column_name] = c.name,
[data_type] = t.name,
[character_maximum_length] = c.max_length
FROM tempdb.sys.columns c
inner join tempdb.sys.types t on t.system_type_id = c.system_type_id
WHERE [object_id] = object_id('tempdb..#TEMP1');
DROP TABLE #TEMP1
同義語とは何ですか? – Aliostad
@Aliostad - データベースオブジェクトの代替名。レガシーコードを壊さずにオブジェクトの名前を変更するのに便利です(少なくとも理論上 - 時には抽象化はこの質問のように機能しません)。構文: 'CREATE SYNONYM ProjectSyn FOR Project' –
ありがとうございました。絶対使用しないでください。 – Aliostad