[SQL 2k5] Leggere file XML

lunedì 30 marzo 2009 - 12.47

tankian Profilo | Junior Member

Ciao, facendo riferimento a questo articolo scritto da Lorenzo Benaglia:

http://www.dotnethell.it/articles/XML-SQL-Server-2005.aspx

ho provato a leggere un file xml avente questa struttura:


1024x768 107Kb


Eseguendo questa query (molto campata per aria):

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ho questo risultato:


733x320 21Kb


In pratica non ho errori però non legge nessuna riga..in file in questione ha 4000 righe circa...suggerimenti?

lbenaglia Profilo | Guru

>In pratica non ho errori però non legge nessuna riga..in file
>in questione ha 4000 righe circa...suggerimenti?

Ciao Stefano,

Puoi allegare un file .zip con un esempio del file xml ed il result set finale che vorresti ottenere?

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

tankian Profilo | Junior Member

Ciao Lorenzo (posso darti del tu?) ti allego tutto il file, per il result set se ho capito bene cos'è vorrei popolare questa tabella:

CREATE TABLE [dbo].[articoli]( [num] [bigint] IDENTITY(1,1) NOT NULL, [catcod] [varchar](20) NULL, [catdes] [varchar](50) NULL, [lincod] [varchar](20) NULL, [lindes] [varchar](50) NULL, [blecod] [varchar](20) NULL, [bledes] [varchar](50) NULL, [eticod] [varchar](20) NULL, [etides] [varchar](50) NULL, [artcod] [varchar](20) NULL, [artdes] [varchar](50) NULL, CONSTRAINT PK_articoli PRIMARY KEY(artcod) );

Ovviamente prima di fare l'INSERT stavo provando a fare il SELECT. Dimmi se hai bisogno di altro.

lbenaglia Profilo | Guru

>CREATE TABLE [dbo].[articoli](
> [num] [bigint] IDENTITY(1,1) NOT NULL,
> [catcod] [varchar](20) NULL,
> [catdes] [varchar](50) NULL,
> [lincod] [varchar](20) NULL,
> [lindes] [varchar](50) NULL,
> [blecod] [varchar](20) NULL,
> [bledes] [varchar](50) NULL,
> [eticod] [varchar](20) NULL,
> [etides] [varchar](50) NULL,
> [artcod] [varchar](20) NULL,
> [artdes] [varchar](50) NULL,
>CONSTRAINT PK_articoli PRIMARY KEY(artcod)
>);

La definizione della tabella non è corretta dato che una PRIMARY KEY può essere definita esclusivamente su una o più colonne NOT NULL.
Inoltre hai definito l'attributo IDENTITY per la colonna [num], ma il file XML contiene un elemento chiamato num che presumo tu voglia importare...

Prova a dare un'occhiata al seguente esempio:

USE tempdb; CREATE TABLE dbo.articoli( num bigint NOT NULL, catcod varchar(20) NULL, catdes varchar(50) NULL, lincod varchar(20) NULL, lindes varchar(50) NULL, blecod varchar(20) NULL, bledes varchar(50) NULL, eticod varchar(20) NULL, etides varchar(50) NULL, artcod varchar(20) NOT NULL, artdes varchar(50) NULL, CONSTRAINT PK_articoli PRIMARY KEY(artcod) ); DECLARE @Articoli xml; SET @Articoli = ( SELECT Q.BulkColumn FROM OPENROWSET(BULK 'D:\Users\Lorenzo\Downloads\Articoli.xml', SINGLE_CLOB) AS Q ); INSERT dbo.articoli SELECT myColumn.value('Num[1]', 'bigint') , myColumn.value('Catcod[1]', 'varchar(20)') , myColumn.value('Catdes[1]', 'varchar(50)') , myColumn.value('Lincod[1]', 'varchar(20)') , myColumn.value('Lindes[1]', 'varchar(50)') , myColumn.value('Blecod[1]', 'varchar(20)') , myColumn.value('Bledes[1]', 'varchar(50)') , myColumn.value('Eticod[1]', 'varchar(20)') , myColumn.value('Etides[1]', 'varchar(50)') , myColumn.value('Artcod[1]', 'varchar(20)') , myColumn.value('Artdes[1]', 'varchar(50)') FROM @Articoli.nodes('/Articoli/Articolo') AS myTable(myColumn);

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

tankian Profilo | Junior Member

>La definizione della tabella non è corretta dato che una PRIMARY KEY può essere definita esclusivamente su >una o più colonne NOT NULL.

Hai ragione infatti non ho fatto copia incolla dallo script perchè in realtà la tab è un poco diversa, a me interessava il concetto

>Inoltre hai definito l'attributo IDENTITY per la colonna [num], ma il file XML contiene un elemento chiamato >num che presumo tu voglia importare...

Doppia ragione, tolto dall'insert

Comunque funziona benissimo, grazie e ciao!
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5