2017-10-11 232 views
1

我有一個將項目插入數據庫的功能。它將大量值作爲輸入,並將值作爲XML傳遞。爲SQL Server存儲過程創建xml

考慮一個樣本項目XML:

<ROOT> 
    <Item 
     ItemName="CarlsApplication" 
     ItemTypeID="2"> 
     <TSDefaultDescription DefaultitemDescription="C:\t.text"/>      
     <ItemSellers>   
      <ComputerObject Alias="" DisplayName="" ServiceName="" UserAccount="" /> 
      <ComputerObject Alias="" DisplayName="" ServiceName="" UserAccount="" /> 
     </ItemSellers> 
     <ItemOwners> 
      <ItemOwner Alias="rafchen" FirstName="Rafael" LastName="Chenkov"/> 
     </ItemOwners> 
    </Item> 
</ROOT> 

這將被傳遞到存儲過程。

現在,在這個XML中的每個單獨的值,我必須從其他地方提取。我可以獲得單個的值,比如項目名稱等,但是如何將它們組織成可傳遞的XML?

如何從我擁有的值構造這個XML?

我想我將不得不使用這種格式製作某種模板,然後在該模板中放入變量並填充變量以準備模板。

任何幫助,非常感謝。

回答

3

如果我理解你真正想要的,你可以使用這樣的查詢生成XML:

select 
    ItemName 'Item/@ItemName',   --> Node:`Item` Attribute: `ItemName` 
    ItemTypeId 'Item/@ItemTypeId', 
    cast((
     select 
      Alias 'ComputerObject/@Alias', 
      DisplayName 'ComputerObject/@DisplayName', 
      ServiceName 'ComputerObject/@ServiceName', 
      UserAccount 'ComputerObject/@UserAccount' 
     from 
      ItemSellers 
     where 
      ItemSellers.ItemId = Item.ItemId 
     for xml path('')) as xml) 'Item/ItemSellers', --> Node:`Item` Sub-Node:`ItemSellers` 
    cast((
     select 
      Alias 'ItemOwner/@Alias', 
      FirstName 'ItemOwner/@FirstName', 
      LastName 'ItemOwner/@LastName' 
     from 
      ItemOwners 
     where 
      ItemOwners.ItemId = Item.ItemId 
     for xml path('')) as xml) 'Item/ItemOwners' 
from 
    Item 
for xml path('ROOT'); 

SQL Fiddle Demo

+0

感謝,succint和準確的答案。 –

+0

歡迎您;)。 –