2017-06-19 10 views
0

viewsを定義したシステムを変更することはできますかforeign_keyが適用された列名を提供するcolumnを追加したいですか?システム定義のビューを変更するにはどうすればよいですか?

同様に、sys.foreign_key_columnsの変更点。

スクリプトまたはソースを教えてください。

+1

@ JeroenMostertあなたは答えとして投稿する必要があります。 – alroc

+0

@alroc:あなたは正しい、悪い習慣です。完了しました。 –

+0

@Deep Jeroenが提供した回答を受け入れるべきです – klinger

答えて

12

システムビューの定義を変更することはできません。ほとんどの場合、これは当てはまりません(結局のところ、Microsoft自体がアップグレードでそれを行うことができます)が、ユーザーとして、これを行うべきではなく、それを実行するために必要なステップは(意図的に) とても難しい。システムビューの変更に成功した場合、サーバーはサポート対象外となり、将来の更新プログラムをインストールできなくなる可能性があります。基本的には、このように行かないでください。

もっと実践的なアプローチとして、自分のビューでシステムビューをラップし、代わりにそれらを使用することを検討してください。これらのビューをすべての新しいデータベースで使用できるようにするには、データベースをmodelデータベースに追加します。

外部キーが参照している列の名前も含む特定のビューの場合は、ジョブを実行するビューが1つあります(外部キーの一般的には):あなたがsys.foreign_keys自体からのデータが必要な場合は

CREATE VIEW ext_foreign_keys AS 
SELECT 
    OBJECT_NAME(constraint_object_id) AS foreign_key_name, 
    OBJECT_NAME(parent_object_id) AS parent_table_name, 
    COL_NAME(parent_object_id, parent_column_id) AS parent_column_name, 
    OBJECT_NAME(referenced_object_id) AS referenced_table_name, 
    COL_NAME(referenced_object_id, referenced_column_id) AS referenced_column_name 
FROM sys.foreign_key_columns 

、それを参加します。私はシステム機能OBJECT_NAMECOL_NAMEを使ってここで怠惰になっています。もしあなたが好きなら、あなたは明示的にsys.tablessys.columnsに参加することもできますが、これはもっとタイピングです。とにかくthere are subtle issues with locking when using these functionsなので、やりたいことがあります。

+0

ありがとう@Jeroen。それを実現するためのあらゆる情報源を提供できますか? – Deep

+0

@Deep:私はあなたの後にある可能性のあるビューの種類のための提案で答えを更新しました。むしろシステムビュー自体を変更するためのコード/ステップを意味するなら、私はそれを提供することができますが、私はそうしません。厳重な警告を伴っても、Stack Overflowにそのようなものを置くことは無責任なことでしょう。正当な理由でこれをしたいと思う少数の人々はまた、それ自体を理解するために必要な背景知識を持っていなければなりません(もしそうでなければ、それについて別個の質問をすることができます)。 –

関連する問題