从 XMLNode 中选择是不是算作 SQL Server 中的 3 部分命名约定?
Posted
技术标签:
【中文标题】从 XMLNode 中选择是不是算作 SQL Server 中的 3 部分命名约定?【英文标题】:Does Selecting from XMLNodes Count as 3-Part Naming Convention in SQL Server?从 XMLNode 中选择是否算作 SQL Server 中的 3 部分命名约定? 【发布时间】:2021-12-23 08:44:30 【问题描述】:我最近看到来自@Larnu 的评论,强调列上的 3+ 部分命名将很快(ish)贬值。他的网站上有一篇有用的文章的链接,其中详细说明了这一点:
https://wp.larnu.uk/3-part-naming-on-columns-will-be-deprecated/
具体来说,它引用了 docs.microsoft.com (https://docs.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 的下一个版本,但将在以后的版本中弃用。 SQL Server的具体版本尚未确定:
Category Deprecated feature Replacement Feature name Feature ID Transact-SQL Three-part and four-part column references. Two-part names is the standard-compliant behavior. More than two-part column name 3
我的问题是这是否适用于使用 XMLnodes 作为列引用时?例如:
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,我找不到任何特别的东西,但它们在技术上仍然是列吗?如果弃用的功能确实包含 XMLnodes,如果没有 3+ 部分命名,您如何做到这一点?
【问题讨论】:
【参考方案1】:不,不是。它只是在该列上调用一个方法。
例如,你也可以这样做
CAST(SomeValue AS xml).value(.....
显然这不是三部分命名
The official grammar for 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
没有被归类为额外的列名。
【讨论】:
感谢您的出色回答。我在选择哪个(你的或@Larnu's 的)作为被接受的那个之间犹豫不决 - 这是我想同时勾选的时候之一!【参考方案2】:不,3+部分命名是指当您命名对象名称时,例如SchemaName.TableName.ColumnName
,上面的情况并非如此。
XMLNodes
是表名,x
是列,但是,value
是 xml
类型的方法(基本上是函数),而不是对象。因此,您使用 2 部分命名,然后使用 xml
类型的方法扩展,就像您在 FROM
中为 nodes
(XMLNodes.x.nodes
) 一样。
【讨论】:
感谢您的出色回答。你用通俗易懂的语言表达了我的意思!以上是关于从 XMLNode 中选择是不是算作 SQL Server 中的 3 部分命名约定?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows Phone 中检查 XMLNode 是不是存在