INFORMATION_SCHEMA.ROUTINES包含这两列:
SPECIFIC_SCHEMA: Specific name of the schema. ROUTINE_SCHEMA: Name of the schema that contains this function.
由于CATALOG和NAME的SPECIFIC_和ROUTINE_版本被定义为等效( – 目录的特定名称,该名称与ROUTINE_CATALOG.-)相同,但SCHEMA-
SPECIFIC_SCHEMA和ROUTINE_SCHEMA有什么区别?
解决方法
那有点像向后兼容性.
INFORMATION_SCHEMA本身仅用于更容易地迁移服务器版本和简化.我将提供基于sql Server的示例.
您可能希望(或可能需要)使用sys.objects表,它们基本上提供了几乎所有由INFORMATION_SCHEMA.ROUTINES传递的相同信息.实际上你需要使用它,如果你真的想知道一个程序的真正的模式名称 – 就像微软已经在自己的docs中所说的那样.但是如果你需要构建一个只需要一些基本信息的产品,如一个例程或者这样的东西,你不会去拿sys.objects它可能会从服务器版本更改为服务器版本.这使得它更难维护. INFORMATION_SCHEMA在许多版本上基本保持不变.只有微小的变化才会被应用,而视图下的工作将被微软所改变.这意味着您有一个稳定的代码多年和许多不同的服务器版本.
这可能是事实,有两列具有相同的定义,因此内容相同.它与SPECIFIC_NAME和ROUTINE_NAME或SPECIFIC_CATALOG和ROUTINE_CATALOG相同.他们基本上是一样的,正如微软自己在他们的文档中所说的那样.
它可能是一个遗物,可能永远呆在那里,只是为了兼容其他DBMS代码或旧版本的sql Server本身.
顺便说一句,Postgres具有相同的两行,它们都包含相同的内容.