0

views我可以像我想添加一个column将提供已foreign_key应用的列名称的系统定义进行更改吗?

比如,在sys.foreign_key_columns.

请给我脚本或来源。

4

1 回答 1

12

Microsoft 会告诉您无法更改系统视图的定义。这在大多数情况下是不正确的(毕竟,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_NAME通过使用系统功能和;我在这里很懒惰COL_NAMEsys.tables如果您愿意,您也可以在and上显式加入sys.columns,尽管这需要更多的输入。无论如何,您可能都希望这样做,因为在使用这些函数时存在锁定问题

于 2017-06-19T11:27:13.727 回答