XML - de XML a Tabla SQL

 
Vista:

de XML a Tabla SQL

Publicado por MAURI (1 intervención) el 04/07/2008 16:26:29
Hola a todos y gracias de antemano,
Mi problema es el siguiente:
1. Tengo la siguiente variable XML:
--------------------------------------------------------------------------------
DECLARE @TEMPORAL xml
SET @TEMPORAL = '<Raiz>
<Registro>
<Campo1>1</Campo1>
<Campo2>MI DATO</Campo2>
<Campo3>15.62</Campo3>
<Campo4>2008/12/31</Campo4>
<Campo5>13.996</Campo5>
</Registro>
<Registro>
<Campo1>2</Campo1>
<Campo2>MI SEGUNDO DATO</Campo2>
<Campo3>70.62</Campo3>
<Campo4>2008/01/27</Campo4>
<Campo5>1852.996</Campo5>
</Registro>
</Raiz>'

2. Puedo saber la cantidad de Registros que tengo, con esta instruccion y hasta puedo almacenar el total de registros en una variable entera:
----------------------------------------------------------------------------------------------------
SELECT CONVERT(int,CONVERT(varchar,@TEMPORAL.query('count(/Raiz/Registro)') ))

3. Con la siguiente instrucción capturo el primer registro:
--------------------------------------------------------------------------------------------------------------------
SELECT CONVERT(int,CONVERT(varchar,@TEMPORAL.query('/Raiz/Registro[1]/Campo1/node()'))),
CONVERT(varchar,@TEMPORAL.query('/Raiz/Registro[1]/Campo2/node()')),
CONVERT(smallmoney,CONVERT(varchar,@TEMPORAL.query('/Raiz/Registro[1]/Campo3/node()'))),
CONVERT(smalldatetime,CONVERT(varchar,@TEMPORAL.query('/Raiz/Registro[1]/Campo4/node()'))),
CONVERT(real,CONVERT(varchar,@TEMPORAL.query('/Raiz/Registro[1]/Campo5/node()')))

4. El problema es para seleccionar de manera dinámica un nro de registro, es decir si tengo 20 registros, quisiera acceder al registro n. donde n puede ser un numero del 1 al 20. He intentado resolver haciendo una concatenacion en la frase del @TEMPORAL.query de la siguiente manera: '/Raiz/Registro[' + CONVERT(varchar, n) + ']/Campo5/node()'; pero no me acepta , me sale el siguiente error:
---------------------------------------------------------------------------------------------------------------------
Msg 8172, Level 16, State 1, Line 20
The argument 1 of the xml data type method "query" must be a string literal.


Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder