[英]Does Selecting from XMLNodes Count as 3-Part Naming Convention in SQL Server?
我最近看到來自@Larnu 的評論,強調列上的 3+ 部分命名將很快(ish)被貶值。 在他的網站上有一篇有用的文章的鏈接,其中詳細說明了這一點:
https://wp.larnu.uk/3-part-naming-on-columns-will-be-deprecated/
Specifically, it quotes from the depreciated SQL Server features page on 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 服務器支持以下 SQL 服務器數據庫引擎功能,但將在以后的版本中棄用。 SQL Server的具體版本尚未確定:
類別 已棄用的功能 替換功能 姓名 功能 ID 事務處理 SQL 三部分和四部分列參考。 兩部分名稱是符合標准的行為。 多於兩部分的列名 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+ 部分命名的情況下如何做到這一點?
不它不是。 它只是在該列上調用一個方法。
例如,你也可以這樣做
CAST(SomeValue AS xml).value(.....
顯然這不是三部分命名
<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
沒有被歸類為額外的列名。
不,3+ 部分命名意味着當您命名 object 名稱時,例如SchemaName.TableName.ColumnName
,上述情況並非如此。
XMLNodes
是表名, x
是列,然而, value
是xml
類型的方法(基本上是一個函數),而不是 object。 因此,您使用的是 2 部分命名,然后使用xml
類型的方法擴展,就像您在nodes
的FROM
( XMLNodes.x.nodes
) 中一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.