我最近看到@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 三部分和四部分的列參考。 兩部分名稱是符合標準的行為。 多于兩部分的列名 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 部分命名的情況下做到這一點?
uj5u.com熱心網友回復:
不它不是。它只是在該列上呼叫一個方法。
例如,你也可以這樣做
CAST(SomeValue AS xml).value(.....
顯然這不是三部分命名
官方語法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沒有被歸類為額外的列名。
uj5u.com熱心網友回復:
不,3 部分命名意味著當您命名物件名稱時,例如SchemaName.TableName.ColumnName,上面的情況并非如此。
XMLNodes是表名,而x列value是該xml型別的方法(基本上是函式),而不是物件。所以你使用 2 部分命名,然后使用xml型別的方法擴展,就像你在FROMfor nodes( XMLNodes.x.nodes) 中一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391568.html
標籤:sql-server 节点
上一篇:具有固定符號數的MSSQL列
