【问题标题】:How to make changes in system defined views?如何更改系统定义的视图?
【发布时间】:2017-06-19 11:16:54
【问题描述】:

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

比如,sys.foreign_key_columns 的变化。

请提供脚本或源代码。

【问题讨论】:

  • @JeroenMostert 您应该将其发布为答案。
  • @alroc:你说得对,坏习惯。完成。
  • @Deep 你应该接受 Jeroen 提供的答案

标签: sql-server tsql system-views


【解决方案1】:

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_NAMECOL_NAME;如果您愿意,您也可以在sys.tablessys.columns 上显式加入,尽管这需要更多的输入。无论如何,您可能都想这样做,因为there are subtle issues with locking when using these functions

【讨论】:

  • 谢谢@Jeroen。你能提供任何资源来实现它吗?
  • @Deep:我更新了答案,提出了您可能追求的观点的建议。如果您的意思是更改系统视图本身的代码/步骤,我可以提供,但我不会。将类似的东西放在 Stack Overflow 上是不负责任的,即使伴随着严厉的警告。少数出于正当理由想要这样做的人也应该具备自己解决问题所需的背景知识(或者如果没有,他们可以提出一个单独的问题)。
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 2022-06-16
  • 2019-02-20
  • 1970-01-01
相关资源
最近更新 更多