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

时间:2017-06-19 11:16:55

标签: sql-server tsql system-views

我是否可以在系统定义views中进行更改,例如我想添加一个column,它将提供已应用foreign_key的列名?

赞,sys.foreign_key_columns中的更改。

请提供脚本或来源。

1 个答案:

答案 0 :(得分:12)

Microsoft将告诉您,无法更改系统视图的定义。这在大多数情况下都不是这样(毕竟,微软自己可以通过升级来实现),但作为用户,您不应该这样做,并且执行此操作所需的步骤是非常正确的。 (故意)非常复杂。如果您确实成功更改了系统视图,则服务器不再受支持,您可能无法安装将来的更新。基本上,不要这样。

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

对于视图的特定情况,该视图还包括外键所指的列的名称,这里是一个将完成工作的视图(并且是一个更友好的视图一般的外键):

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

如果您需要sys.foreign_keys本身的数据,请将其加入。我使用系统函数OBJECT_NAMECOL_NAME在这里很懒;如果您愿意,也可以明确加入sys.tablessys.columns,但这样可以输入更多内容。你可能想要这样做,因为there are subtle issues with locking when using these functions