2015-11-04 46 views
0

我試圖通過SQL爲負載測試生成一些XML,但我在正確構建XML時遇到了問題。這是我有:SQL中的XML:當使用表列而不是字符串時,元素值的計算方式不同

-- Generate XML from table 
SELECT id AS '@id', 
action AS '@action', 
actionTime AS '@actionTime', 
firstName AS '@firstName', 
lastName AS '@lastName', 
email AS '@email', 
    (SELECT isActive AS '@isActive', 
    actionTime AS '@actionTime', 
    displayName AS '@displayName', 
    identifierId 
FOR XML PATH('identifier'), TYPE 
) 
FROM scratch.dbo.Identities 
FOR XML PATH('user'), ROOT('Users') 

這會生成XML,看起來像這樣:

<Users> 
    <user id="QALoadTest1" action="add" actionTime="2015-11-01T00:00:00" firstName="Load" lastName="Test1" email="[email protected]"> 
    <identifier isActive="1" actionTime="2015-11-01T00:00:00" displayName="Load Test 1"> 
     <identifierId>1111111111</identifierId> 
     </identifier> 
    </user> 
</Users> 

如果我傳遞一個字符串作爲標識符值,正確生成XML:

SELECT id AS '@id', 
action AS '@action', 
actionTime AS '@actionTime', 
firstName AS '@firstName', 
lastName AS '@lastName', 
email AS '@email', 
    (SELECT isActive AS '@isActive', 
    actionTime AS '@actionTime', 
    displayName AS '@displayName', 
    '11111111111' 
FOR XML PATH('identifier'), TYPE 
) 
FROM scratch.dbo.Identities 
FOR XML PATH('user'), ROOT('Users') 

這將生成以下,這正是我想要的:

<Users> 
    <user id="QALoadTest1" action="add" actionTime="2015-11-01T00:00:00" firstName="Load" lastName="Test1" email="[email protected]"> 
    <identifier isActive="1" actionTime="2015-11-01T00:00:00" displayName="Load Test 1">11111111111</identifierId> 
    </user> 
</Users> 

在這裏使用列值和字符串有什麼區別?有趣的是,當我將列值換成單引號(''' + identifierId + ''')時,它會生成正確結構的XML,但帶有額外的引號(...displayName="Load Test 1">'11111111111'</identifierId>

回答

0

您的硬編碼值不會自動生成列名稱;列選擇不(看看SELECT identifierId from IdentitiesSELECT '11111111111' from Identities的結果的標題中的差異。)

試着告訴它,你特別想在一個文本節點,而不是一列衍生名您的數據:

-- Generate XML from table 
SELECT id AS '@id', 
action AS '@action', 
actionTime AS '@actionTime', 
firstName AS '@firstName', 
lastName AS '@lastName', 
email AS '@email', 
    (SELECT isActive AS '@isActive', 
    actionTime AS '@actionTime', 
    displayName AS '@displayName', 
    identifierId AS 'text()' 
FOR XML PATH('identifier'), TYPE 
) 
FROM scratch.dbo.Identities 
FOR XML PATH('user'), ROOT('Users') 
+0

太棒了,謝謝!工作就像一個魅力:) –

相關問題