2017-08-25 37 views
1

做以下查询:从DB把列类型的XML属性

SELECT * FROM MY_DATA 
FOR XML PATH('NODE'), TYPE, ROOT('ROOT') 

我有以下的输出:

<ROOT> 
    <NODE> 
     <THE_ID>11</Facility_ID> 
     <Station_ID>HA</Station_ID> 
     <Case_No>731</Case_No> 
    </NODE> 
</ROOT> 

什么我不知道是是否可能有输出如下:

<ROOT> 
    <NODE> 
     <THE_ID int>11</Facility_ID> 
     <Station_ID varchar="30">HA</Station_ID> 
     <Case_No varchar="50>731</Case_No> 
    </NODE> 
</ROOT> 

将类型设置为属性。 这可能吗?

预先感谢您。

+0

只需创建别名与添加的数据类型。 –

+0

你的例子充满了看起来不正确的东西。输出中的THE_ID是“00011”,它是一个字符串(如果是“int”,sql不会输出前导0)。其次,示例输出中的属性是数据类型的名称,值是...它的长度?我们是否应该假设你想要一个名为“datatype”的属性,其值是数据类型? – Xedni

回答

0

以下是您所追求的信息。将其绑定到您的查询中并与之一起玩。

要获取项目作为属性,请使用“as [@AttributeName]”。

例如,在您的示例中,将Select Station_Id部分更改为选择a,b,Station_Id作为[@Station_Id]。

'

DECLARE @Table VARCHAR(MAX) = 'YourTableName' 

SELECT t.name AS [Table] 
    , c.name AS [Column] 
    , TYPE_NAME(c.user_type_id) AS [Type] 
    , c.max_length AS [Size] 
    , CASE WHEN c.is_nullable = 1 THEN '' 
      ELSE 'No Nulls' 
     END AS Nullable 
    , ROW_NUMBER() OVER (PARTITION BY t.name ORDER BY c.name ASC) AS rnk 

    FROM sys.columns AS c 
     JOIN sys.tables AS t ON c.object_id = t.object_id 
    WHERE t.name LIKE @Table 
    --  AND c.name IN ('thiscol', 'thatcol') 
    ORDER BY t.name 
    , c.name