2017-10-11 5 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の個々の値のそれぞれは、別の場所から抽出する必要があります。私はItem nameなどのような個々の値を得ることができますが、どのようにそれらを渡すことができる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

あなたの歓迎;)。 –

関連する問題