关于不推荐使用的功能(超过两部分列名称)

时间:2017-01-06 03:55:29

标签: sql-server sql-server-2008 sql-server-2014

关于不推荐使用的功能(超过两部分列名称)的定义是

  

查询在列列表中使用了3部分或4部分名称。更改查询以使用符合标准的2部分名称。每次编译时发生一次。

我可以问这个功能的一些例子吗?

因为我有一些代码使用sql server的某些功能,例如:

Select xml.Item.value('[something]', 'varchar(20)') AS something from xml

将部分xml.Item.value(...)视为列列表中的3部分或4部分名称吗?

由于我只是手动浏览数据库中的商店程序来搜索这个已弃用的功能,有没有其他方法(如查询)在我的数据库中查找这些内容?

非常感谢

1 个答案:

答案 0 :(得分:4)

以下是引用选项(但对于所有数据库对象都不相同):

  1. 1部分命名:tablename(架构:已登录用户的默认架构(例如:dbo),数据库:当前)

  2. 两部分命名:schemaname.tablename(数据库当前)

  3. 3部分命名:servername.schemaname.tablename

  4. 4部分命名:linkedserver.servername.schemaname.tablename

  5. 对于您的示例,部分xml.Item.value(...)不适用于3部分命名文化 - 因为value()是从xml类型列或变量中检索值的方法。

    对于第二部分,您可以使用此查询查找数据库中正在使用和运行的所有deprecated features -

    SELECT OBJECT_NAME,counter_name,instance_name AS 'Deprecated Feature',cntr_value AS 'Number of Times Used'
    FROM sys.dm_os_performance_counters WHERE OBJECT_NAME LIKE '%:Deprecated%' AND cntr_value > 0
    ORDER BY 'Number of Times Used' DESC
    

    脚注:根据Microsoft为什么要弃用该功能,这就是我所得到的 - 帮助优化器,减少混乱和标准化代码。

    修改:关注link - 它对于识别已弃用的功能非常有用。现在,如果您想在stored procedure中找到一组特定的文字/关键字,那么您可以尝试此处列出的任何方法 - link