2017-08-25 40 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