2017-10-11 12 views
1

J'ai une fonction pour insérer un élément dans la base de données. Cela prend beaucoup de valeurs en entrée et les valeurs sont passées en XML.Création de xml pour la procédure stockée SQL Server

Considérons un exemple d'élément 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> 

Cela doit être transmis à la procédure stockée.

Maintenant, chacune de ces valeurs individuelles dans ce XML, je dois extraire d'ailleurs. Je peux obtenir les valeurs individuelles comme le nom d'article, etc., mais comment les organiser dans un XML qui peut être passé?

Comment puis-je construire ce XML à partir des valeurs que j'ai?

Je suppose que je devrais faire une sorte de modèle avec ce format, puis mettre des variables dans ce modèle et remplir les variables pour préparer le modèle.

Toute aide est grandement appréciée.

Répondre

3

Si je comprends ce que vous voulez vraiment, vous pouvez utiliser une requête comme ceci pour générer ce 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

grâce, réponse succinte et précise. –

+0

Votre bienvenue;). –