Tab(Col)在t-sql中的含义是什么?

时间:2013-12-04 16:53:05

标签: sql xml sql-server-2008

我需要在Microsoft SQL Server Management 2008中从XML创建一个表。以下创建了我需要的表,但是我不知道Tab(Col)的作用。为了示例,简化了表和xml。有人可以向我解释Tab(Col)正在做什么吗?感谢

注意:这是按原样运行的。只需要一个概念性的解释。

DECLARE @xml XML
SET @xml = '<Root>
               <Order>
                  <customer_id> 1 </customer_id>
                  <credit> 1.03 </credit>
               </Order>
               <Order>                 
                  <customer_id> 2 </customer_id>
                  <credit> 1500585412.02 </credit>
               </Order>
               <Order>
                  <customer_id> 3 </customer_id>
                  <credit> 10.25 </credit>
               </Order>
            <Root>'

SELECT tab.col.value('customer_id[1]','INT') as customer_id,
       tab.col.value('credit[1]','MONEY') as credit
INTO #temp_order
FROM @xml.nodes('/Root/Order') Tab(Col)

SELECT * FROM #temp_order

这将创建表#temp_order:

customer_id  | credit
             |
          1  | 1.03 
          2  | 1500585412.02 
          3  | 10.25 

1 个答案:

答案 0 :(得分:3)

FROM声明中,Tab(Col)@xml.nodes('/Root/Order')的结果指定了table and column aliases

[ FROM { <table_source> } [ ,...n ] ]
<table_source> ::= 
{
    # ...
    | @variable.function_call ( expression [ ,...n ] ) [ [ AS ] table_alias ] [ (column_alias [ ,...n ] ) ]
}

这会将它们命名为可以将它们称为表Tab,其中包含1列,Col

SELECT tab.col.value(-- ...
--     ^^^ ^^^

也可以使用可选的AS关键字编写:

FROM @xml.nodes('/Root/Order') AS Tab(Col)