2017-10-11 328 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

欢迎您;)。 –