3
Compte tenu de cette XML:Insertion XML dans la table SQL Server
<Documents>
<Batch BatchID = "1" BatchName = "Fred Flintstone">
<DocCollection>
<Document DocumentID = "269" KeyData = "" />
<Document DocumentID = "6" KeyData = "" />
<Document DocumentID = "299" KeyData = "" ImageFile="Test.TIF" />
</DocCollection>
</Batch>
<Batch BatchID = "2" BatchName = "Barney Rubble">
<DocCollection>
<Document DocumentID = "269" KeyData = "" />
<Document DocumentID = "6" KeyData = "" />
</DocCollection>
</Batch>
</Documents>
je dois l'insérer dans une table dans SQL Server dans ce format:
BatchID BatchName DocumentID
1 Fred Flintstone 269
1 Fred Flintstone 6
1 Fred Flintstone 299
2 Barney Rubble 269
2 Barney Rubble 6
Ce SQL:
SELECT
XTbl.XCol.value('./@BatchID','int') AS BatchID,
XTbl.XCol.value('./@BatchName','varchar(100)') AS BatchName,
XTbl.XCol.value('DocCollection[1]/DocumentID[1]','int') AS DocumentID
FROM @Data.nodes('/Documents/Batch') AS XTbl(XCol)
obtient moi ce résultat:
BatchID BatchName DocumentID
1 Fred Flintstone NULL
2 Barney Rubble NULL
Qu'est-ce que je fais mal?
Aussi, quelqu'un peut-il recommander un bon tutoriel pour XML dans SQL Server?
Merci
Carl
bonne solution, +1 de mon côté, mais pourquoi le '*' 'dans les premiers .nodes()'? – Shnugo
@Shnugo Maintenant que vous le mentionnez,/Batch serait plus sûr/plus spécifique. Ou pensiez-vous quelque chose d'autre? –
Non, juste pour éviter les erreurs, s'il peut y avoir plus de nœuds avec d'autres noms ... – Shnugo