ROUTINE_NAME和SPECIFIC_NAME之间有什么区别?

时间:2014-05-22 13:10:09

标签: sql-server tsql

在INFORMATION_SCHEMA.ROUTINES视图中,ROUTINE_NAME和SPECIFIC_NAME存在。根据{{​​3}},它们是相同的。它们只是为了某些种类的向后兼容吗?如果不是为什么视图中包含冗余字段?

1 个答案:

答案 0 :(得分:9)

ANSI SQL标准不禁止重载,即两个具有相同名称的对象。 SPECIFIC_NAME是重载模块的唯一名称,而ROUTINE_NAME不保证是唯一的。无论您何时看到SPECIFIC,例如SPECIFIC_CATALOG和SPECIFIC_SCHEMA,都是如此。

T-SQL没有此功能,因此SPECIFIC_NAME和ROUTINE_NAME始终相同。

我所知道的唯一支持此功能的SQL实现是PostgreSQL(参见此处:http://www.postgresql.org/docs/current/interactive/infoschema-routines.html),但我可能错了。我的Oracle生锈了。

我不完全确定SPECIFIC_CATALOG如何工作,尽管我认为它可能包含一些路径或服务器信息,以区分具有相同名称的两个不同数据库。