2010-08-04 4 views
1

J'utilise classic asp et je passe un varchar (type de données ado) dans une colonne de données xml dans un proc.SQL Server 2005 XML vers la table

Le xml se présente comme suit:

<DocumentCriteria> 
    <Document documentGUID="{B49654E7-9AF2-4B89-AF8F-5146F7CD4911}" graderFYC="5907"> 
     <criterion cnumber="1" rank="3"/> 
     <criterion cnumber="3" rank="3"/> 
    </Document> 
</DocumentCriteria>' 

Je voudrais avoir une table qui ressemble à ceci:

DocumentGUID|GraderFYC|Cnumber|Rank 
{guid}  | 5907 | 1  | 3 
{guid}  | 5907 | 3  | 3 

Comment puis-je faire dans une procédure? Le type adVarchar est-il correct dans la connexion ADO?

Répondre

3

Vous avez donc un proc stocké qui prend un VARCHAR? OK, quelque chose comme cela fonctionnera:

ALTER PROCEDURE dbo.YourProcedure(@data VARCHAR(2000)) 
AS BEGIN 

    DECLARE @XmlContent XML 
    SET @XmlContent = CAST(@data AS XML) 

    INSERT INTO dbo.YourTable(DocumentGUID, GraderFYC, Cnumber, Rank) 
     SELECT 
     @XmlContent.value('(/DocumentCriteria/Document/@documentGUID)[1]', 'Varchar(50)'), 
     @XmlContent.value('(/DocumentCriteria/Document/@graderFYC)[1]', 'int'), 
     Doc.Crit.value('(@cnumber)[1]', 'int') AS 'CNumber', 
     Doc.Crit.value('(@rank)[1]', 'int') AS 'Rank' 
     FROM 
     @XmlContent.nodes('/DocumentCriteria/Document/criterion') AS Doc(Crit) 
END 

Ceci affecte le DocumentGUID et GraderFYC de votre balise unique <Document> puis itère sur tous les nœuds contient <criterion> pour saisir le reste des données.