“::”和“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”模式有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章