INFORMATION_SCHEMA.ROUTINES中SPECIFIC_SCHEMA和ROUTINE_SCHEMA有什么区别?

Kar*_*ger 11 sql sql-server

INFORMATION_SCHEMA.ROUTINES 包含这两列:

SPECIFIC_SCHEMA: Specific name of the schema.
ROUTINE_SCHEMA: Name of the schema that contains this function.
Run Code Online (Sandbox Code Playgroud)

technet doc

对于SPECIFIC_和的ROUTINE_版本CATALOGNAME定义为等效的(目录ROUTINE_CATALOG的特定名称.此名称与.- 相同),但对于SCHEMA-省略了这个措辞

SPECIFIC_SCHEMA和之间有什么区别ROUTINE_SCHEMA

[编辑:显然3年多后,这被标记为重复,所以我必须澄清.建议的副本是关于不同的字段,所以不,我不相信它是重复.]

Ion*_*nic 4

嗯,这有点像向后兼容。

INFORMATION_SCHEMA本身只是用于更轻松地迁移服务器版本和简化。我将提供基于 SQL Server 的示例。

您可能想要(或者可能需要)使用该表sys.objects,它基本上提供了与 提供的几乎所有相同的信息INFORMATION_SCHEMA.ROUTINES。事实上,如果您确实想知道过程的真实模式名称,您需要使用它 - 正如微软已经在他们自己的文档中声明的那样。但是,如果您需要构建一个只需要一些基本信息(例如例程是否存在或类似信息)的产品,您将不会接受sys.objects它可能会因服务器版本而异。这使得维护变得更加困难。INFORMATION_SCHEMA许多版本基本上保持不变。Microsoft 将仅应用较小的更改,并且视图下的工作将被更改。这意味着您拥有多年稳定的代码和许多不同的服务器版本。

这可能是事实,即有两列具有相同的定义,因此内容也相同。SPECIFIC_NAME它与 andROUTINE_NAMESPECIFIC_CATALOGand相同ROUTINE_CATALOG。正如微软在其文档中自我声明的那样,它们基本上是相同的。

它可能是一个遗迹,可能永远留在那里,只是为了与其他 DBMS 代码或旧版本的 SQL Server 本身兼容。

顺便说一句,Postgres 有相同的两行,它们都包含相同的内容。