New Entry con problema

venerdì 21 settembre 2007 - 10.31

mirella.sa Profilo | Newbie

Ciao a tutti, sono una new entry nel forum.
Da un paio di mesi sono alle prese con la relizzazione di un DB usando SQL Server 2005. dopo averlo completamente realizzato e testato, ho deciso di tentare di popolarlo leggendo i dati da un file in formato xml.
E qui e` sorto il problema: riempie la tabella di destinazione con un numero corretto di record ma di valori tutti 'null'.
Vi allego una parte del mio codice cosi` magari e` piu` semplice.
Vi ringrazio molto, ci sto sbattendo la testa da un po` di giorni, soprattutto dopo che ero riuscita ad esportare dal DB in un file xml. (Ho usato proprio questo file esportato come file da importare in modo, credo, da non commettere errori di formato)
Ciao
Mirella

Declare @xmlDoc xml

SET @xmlDoc = (
Select test.BulkColumn From OPENROWSET (Bulk 'C:\Persone1.xml', SINGLE_CLOB) As test )
Select @xmlDoc

DECLARE @hdoc int
EXEC sp_xml_preparedocument @hdoc OUTPUT, @xmlDoc;

SELECT *
FROM OPENXML (@hdoc, '/Id_Persone/dbo.Persone',1)
WITH ( First_Name nvarchar(50) '../@Nome',
Last_Name nvarchar(50)'../@Cognome',
Phone nvarchar(20) '../@Telefono'
);
EXEC sp_xml_removedocument @hdoc;

lbenaglia Profilo | Guru

>Ciao a tutti, sono una new entry nel forum.

Ciao Mirella, benvenuta

>E qui e` sorto il problema: riempie la tabella di destinazione
>con un numero corretto di record ma di valori tutti 'null'.
>Vi allego una parte del mio codice cosi` magari e` piu` semplice.

Purtroppo senza file XML possiamo fare ben poco.
Prova a dare un'occhiata a questo mio articolo:
http://www.infoproget.com/articoli/leggerexml.htm

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

mirella.sa Profilo | Newbie

Ciao e grazie...
Hai ragione, allego il file xml cosi` si comprende. Io ho seguito quasi completamente il tuo articolo, e` cosi` che ho scoperto cosa potevo fare e mi e` venuta l`idea di farlo.

<?xml version="1.0" encoding="UTF-8" ?>
- <Id_Persone>
- <dbo.Persone>
<Nome>Antonio</Nome>
<Cognome>Rossi</Cognome>
<Telefono>0812345678</Telefono>
</dbo.Persone>
- <dbo.Persone>
<Nome>Bartolo</Nome>
<Cognome>Verdi</Cognome>
<Telefono>0812345876</Telefono>
</dbo.Persone>
</Id_Persone>

lbenaglia Profilo | Guru

>Hai ragione, allego il file xml cosi` si comprende. Io ho seguito
>quasi completamente il tuo articolo, e` cosi` che ho scoperto
>cosa potevo fare e mi e` venuta l`idea di farlo.

Il problema sta proprio nel fatto che hai letto *quasi* completamente l'articolo e hai adattato meccanicamente uno degli esempi proposti al tuo caso, senza ragionarci più di tanto.
Mi limiterò quindi a proporti la soluzione, senza però spiegarti niente dato che rileggendo con attenzione l'articolo capirai il significato di ogni singolo comando e relativa sintassi:

USE tempdb; DECLARE @xmlDoc xml; /* Carico l'intero file XML in una variabile XML */ SET @xmlDoc = ( SELECT Q.BulkColumn FROM OPENROWSET(BULK 'C:\Users\Lorenzo\Documents\Persone.xml', SINGLE_CLOB) AS Q ); /* Eseguo la stessa query utilizzando la funzione OPENXML */ DECLARE @hdoc int EXEC sp_xml_preparedocument @hdoc OUTPUT, @xmlDoc; SELECT * FROM OPENXML (@hdoc, '/Id_Persone/dbo.Persone', 2) WITH ( FirstName nvarchar(10) 'Nome', LastName nvarchar(10) 'Cognome', Phone nvarchar(10) 'Telefono' ); EXEC sp_xml_removedocument @hdoc; /* Rappresento in forma relazionale il documento ** utilizzando i metodi nodes e value */ SELECT myColumn.value('Nome[1]', 'nvarchar(10)') AS FirstName , myColumn.value('Cognome[1]', 'nvarchar(10)') AS LastName , myColumn.value('Telefono[1]', 'varchar(10)') AS Phone FROM @xmlDoc.nodes('/Id_Persone/dbo.Persone') AS myTable(myColumn); /* Output: FirstName LastName Phone ---------- ---------- ---------- Antonio Rossi 0812345678 Bartolo Verdi 0812345876 (2 row(s) affected) */

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

mirella.sa Profilo | Newbie

Grazie per la risposta nonostante la superficialita` da parte mia...
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5