当前位置: 首页 > 知识库问答 >
问题:

在SQL Server中,从XMLNodes中选择是否算作三部分命名约定?

温星华
2023-03-14

我最近看到@Larnu的一条评论,强调专栏的三部分命名很快就会贬值。他的网站上有一篇有用文章的链接,详细介绍了这一点:

https://WP . larnu . uk/3-part-naming-on-columns-will-be-deprecated/

具体来说,它引用了learn.microsoft.com上的depreciated SQL Server features页面(https://learn . Microsoft . com/en-us/SQL/database-engine/deprecated-database-engine-features-in-SQL-Server-2016?view=sql-server-ver15):

SQL Server的下一版本支持以下SQL Server数据库引擎功能,但在以后的版本中将不再推荐使用。SQL Server的具体版本尚未确定:

我的问题是,这是否适用于使用XML节点作为列引用时?例如:

SELECT
    XMLNodes.x.value('@time', 'datetime') as Runtime,
    InnerXMLNode.x.value('@currency', 'varchar(3)') as Currency,
    InnerXMLNode.x.value('@rate', 'Decimal(10,7)') as Rate
from
    @xmlFile.nodes('/Envelope/Cube/Cube') as XMLNodes(x)
    cross apply XMLNodes.x.nodes('Cube') as InnerXMLNode(x)

我找不到任何明确排除XMLnodes的东西,但是它们在技术上还是列吗?如果depreciated特性确实包含XMLnodes,那么在没有3部分命名的情况下,如何做到这一点呢?

共有2个答案

穆毅然
2023-03-14

不,三部分命名是指命名对象名称,例如< code>SchemaName。TableName.ColumnName,但上面的情况并非如此。

< code>XMLNodes是表名,而< code>x是列,但是< code>value是< code>xml类型的方法(基本上是一个函数),而不是对象。因此,您使用两部分命名,然后使用< code>xml类型的方法扩展,就像您在< code > nodes (< code > xmlnodes . x . nodes )的< code>FROM中一样。

慕项明
2023-03-14

不,它不是。它只是在该列上调用一个方法。

例如,你也可以做

CAST(SomeValue AS xml).value(.....

显然,这不是三部分命名

< code>SELECT的官方语法如下

<select_list> ::=   
    {   
      *   
      | { table_name | view_name | table_alias }.*   
      | {  
          [ { table_name | view_name | table_alias }. ]  
               { column_name | $IDENTITY | $ROWGUID }   
          | udt_column_name [ { . | :: } { { property_name | field_name }   
            | method_name ( argument [ ,...n] ) } ]  
          | expression  
          [ [ AS ] column_alias ]   
         }  
      | column_alias = expression   
    } [ ,...n ]   

尽管语法不完美,但您可以看到udt_column_name.method_name 未归类为额外的列名。

 类似资料:
  • 问题内容: 这是我的方法: 表名是小写,下划线的用途来分隔词语,并且是单数(例如,等 我通常(并非总是)具有自动增量PK。我用下面的约定:(例如,等)。 当表包含作为外键的列时,我只需从它来自的任何表中复制该键的列名。例如,假设表格具有FK (的PK )。 在定义FK来强制引用完整性时,我使用以下代码:(例如,扩展示例3,它将是)。由于这是表名/列名的组合,因此可以保证它在数据库中是唯一的。 我按

  • 我想问一下,是否有人只能从表A中选择值。请参阅下面的hibernate代码 现在,它就像从A、B和C中选择值,而且太多了。 谢谢你吉米

  • 问题内容: 我有一个大于1000万行的巨大表。我需要从中有效地获取5000个随机样本。我有一些限制因素,使我想要的总行数减少到9密耳。 我尝试通过NEWID()使用order,但是该查询将花费很长时间,因为它必须对所有行进行表扫描。 有没有更快的方法可以做到这一点? 问题答案: 如果您可以使用伪随机抽样并且您使用的是SQL Server 2005/2008,则请看一下TABLESAMPLE。例如,

  • 问题内容: 我到处都读到CSS不区分大小写,但是我有这个选择器 当我像这样在HTML中使用时,它会被拾取 如果我这样改变上面的选择器 这样就不会拾取样式。 问题答案: CSS选择器通常不区分大小写;这包括类和ID选择器。 但是HTML类名 _是_区分大小写的(见属性定义),这就是导致你的第二个例子不匹配。HTML5中没有更改。1个 这是因为选择器的区分大小写取决于文档语言的含义: 在ASCII范围

  • 我如何从底部选择第三个div(即在本例中是带有“4”的div) 我试过了,但它选择了最后三个Divs。 请知道,我可能不知道总的div(它是动态的),但我只需要从底部选择第三个div。

  • 问题内容: 我在Sql Server 2008上有这样的查询: 在上面看到的选择查询中,SqlServer是否优化查询以免一次又一次地计算DATEADD结果。还是将DATEADD结果存储在临时变量中是我自己的责任吗? 问题答案: 令人惊讶的是,我发现内联使用GETDATE()似乎比预先执行这种类型的计算更有效。 如果您检查这些计划,则中间查询将始终以最低的成本(但并非总是最低的花费时间)出现。当然