“::”和“sys”模式有啥区别?

Posted

技术标签:

【中文标题】“::”和“sys”模式有啥区别?【英文标题】:What's the difference between "::" and "sys" schemas?“::”和“sys”模式有什么区别? 【发布时间】:2009-11-11 04:41:19 【问题描述】:

据我所知,fn_trace_getinfo 上的 BOL 示例曾经在示例中使用 :: 而不是 sys 架构,如下所示

来自

    SELECT * FROM ::fn_trace_getinfo(default)

    SELECT * FROM sys.fn_trace_getinfo(default)

这两者有什么区别吗?:: 是什么意思?

【问题讨论】:

【参考方案1】:

好的,我希望this(以 fn_ 开头的 UDF...)有所帮助

从页面看来 :: 会告诉 Sql Server 这必须是系统 UDF,并且只能在 Master DB 中找到。

问:

我经常阅读如何存储 我们创建的程序不应该是 用 sp_ 命名,因为 SQL Server 将 首先检查主数据库之前 尝试查找 sp 时的当前数据库 执行。我总是点点头 想我是多么庆幸我没有做 那。由于某种原因,它从未点击过 UDF 行为可能是相同的。

我有几个以 fn_ 开头的 UDF... 当我将 UDF 引用为 dbo.fn_... SQL Server 是否检查主数据库 对于这些,只有在没有找到 他们检查当前的数据库?如果是这样,是 这对性能有影响吗?

答:

没有。要调用系统提供的 UDF,您 需要使用::,所以这就是SQL 服务器寻找。所有系统提供 UDF 是表函数,作为标量 系统函数根本不是 UDF。

【讨论】:

【参考方案2】:

Even the SQL Experts are not sure. It changed from SQL Server 2000 to SQL Server 2005

我的随机猜测是 SQL Server 2005 中的 user/schema separation 消除了对速记系统架构的需要

【讨论】:

以上是关于“::”和“sys”模式有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

桥接模式和策略模式有啥区别?

设计模式和架构模式有啥区别?

分类和模式识别有啥区别?

工厂设计模式和DAO设计模式有啥区别

模板方法和策略模式有啥区别?

流畅的界面和 Builder 模式有啥区别?