Sql server 如何在系统定义的视图中进行更改?

Sql server 如何在系统定义的视图中进行更改?,sql-server,tsql,system-views,Sql Server,Tsql,System Views,我是否可以在系统定义的视图中进行更改,就像我想添加一个列,该列将提供已应用的外键的列名称 例如,sys.foreign\u key\u列中的更改 请提供脚本或源代码。Microsoft将告诉您无法更改系统视图的定义。这在很大程度上是不正确的(毕竟,微软自己可以通过升级来做到),但作为一个用户,你不应该这样做,而且这样做的必要步骤(有意地)非常复杂。如果您成功地更改了系统视图,您的服务器将不再受支持,您可能无法安装将来的更新。基本上,不要走这条路 作为一种更实用的方法,考虑用自己的观点包装系统视图

我是否可以在系统定义的
视图
中进行更改,就像我想添加一个
,该列将提供已应用的
外键
的列名称

例如,
sys.foreign\u key\u列中的更改


请提供脚本或源代码。

Microsoft将告诉您无法更改系统视图的定义。这在很大程度上是不正确的(毕竟,微软自己可以通过升级来做到),但作为一个用户,你不应该这样做,而且这样做的必要步骤(有意地)非常复杂。如果您成功地更改了系统视图,您的服务器将不再受支持,您可能无法安装将来的更新。基本上,不要走这条路

作为一种更实用的方法,考虑用自己的观点包装系统视图,而使用这些视图。如果要使这些视图在所有新数据库中可用,可以将它们添加到

模型
数据库中

对于还包含外键所指列的名称的视图的特定情况,这里有一个视图可以完成此工作(通常是外键的更友好视图):


如果您需要来自
sys.foreign\u keys
本身的数据,请将其连接起来。通过使用系统函数
OBJECT\u NAME
COL\u NAME
,我在这里很懒;如果愿意,还可以在
sys.tables
sys.columns
上显式联接,尽管这需要更多的键入。你可能想这样做,因为。

@Jeroenmoster你应该把它作为一个答案发布。@alroc:你说得对,坏习惯。完成。@Deep你应该接受Jeroen提供的答案谢谢@Jeroen。你能提供任何消息来源让它发生吗?@Deep:我更新了答案,并对你可能追求的观点提出了建议。如果您是指更改系统视图本身的代码/步骤,我可以提供,但我不会提供。即使伴随着严厉的警告,在堆栈溢出上放置这样的东西也是不负责任的。为数不多的出于正当理由想这样做的人也应该具备自己解决问题所需的背景知识(或者,如果没有,他们可以单独提出一个问题)。
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