簡體   English   中英

從 XMLNode 中選擇是否算作 SQL 服務器中的 3 部分命名約定?

[英]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的官方語法如下

<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是列,然而, valuexml類型的方法(基本上是一個函數),而不是 object。 因此,您使用的是 2 部分命名,然后使用xml類型的方法擴展,就像您在nodesFROM ( XMLNodes.x.nodes ) 中一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM