Join con campo XML

mercoledì 08 giugno 2011 - 10.22

maxves Profilo | Newbie

Salve a tutti.
Ho una SP su SQL Server 2005 che accetta 4 parametri.
Una data, 2 INT e un XML

La SP deve aggioranre il campo data e i 2 valori int a tutti i record contenuti del XML

Il campo XML è una lista di ID con la quale va fatta la join con il campo a db sempre di tipo INT.

la struttura dell XMl è la seguente

<BOLLETTINI>
<ID>4</ID>
<ID>8</ID>
<ID>9</ID>
<ID>10</ID>
<ID>11</ID>
<ID>16</ID>
<ID>17</ID>
<ID>18</ID>
</BOLLETTINI>

Capita spesso che la variabile XML contenga anche 15-20 mila ID.
In tali casi la SP impiega molto tempo.
Nell'Execution Plan si nota che la maggior parte del tempo è dovuta alla lettura dell XML (In allegato).
Il test è stato fatto con 15,700 id circa

La SP è molto semlpice è contiente solo l'update incriminato:

UPDATE T_BOLLETTINO
SET STAT_BOLL = @Stato_Bollettino, STAT_AUTO = @Stato_Autore, STAT_DATA = @Stato_Data
FROM T_BOLLETTINO
INNER JOIN @Lista_Valori.nodes ('//BOLLETTINI/ID') Temp ( Items ) ON T_BOLLETTINO.ID_BOLL = Temp.Items.value ('.', 'INT')

Mi date qualche dritta per risolvere il problema ??

Grazie
MaXiM

lbenaglia Profilo | Guru

>Capita spesso che la variabile XML contenga anche 15-20 mila
>ID.
>In tali casi la SP impiega molto tempo.
>Nell'Execution Plan si nota che la maggior parte del tempo è
>dovuta alla lettura dell XML (In allegato).
>Il test è stato fatto con 15,700 id circa

Ciao,

la colonna XML è indicizzata?
Nel caso non lo sia, approfondisci l'argomento sui Books Online:
http://msdn.microsoft.com/en-us/library/ms191497.aspx

>Grazie
Prego.

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

maxves Profilo | Newbie

Lorenzo,
Gentilissimo per la risposta.

Un campo XML non esiste.
L'xml è un parametro che mi passa il software, e il campo id è il clustered della tabella.

Il problema è comunque risolto, prendendo spunto (o meglio copiando spudoratamente) dal tuo articolo "Leggere un file XML con SQL Server 2005" link http://www.dotnethell.it/articles/XML-SQL-Server-2005.aspx

Utilizzando la SP SP_XML_PrepareDocument adesso il mio update dura solo 6 secondi...
Grazie ancora a te e a tutto lo staff del sito.

Massimo
MaXiM
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5