SQL Server - Problemas con Store con XML

 
Vista:

Problemas con Store con XML

Publicado por Andres (27 intervenciones) el 17/01/2008 23:55:34
Necesito aprender lo siguiente:

1- Crear un store procedure al que le paso parametros de entrada
2- El store haga consultas con openquery
3- El store retorne un lote de registros.
4- Quiero evitar usar tablas temporales

5-Habia pensado en que el return sea una variable del tipo XML que contenga el resultado de las consultas

¿Me podrian dar un ejemplo claro tanto de como debe ser la llamada al store, como tambien de como armar el store para retornar un lote de registros?

Recien estoy comenzando a ver XML y he descubierto que el help del sql sever tiene muchas palabras pero no es practico para aprender.

Gracias de antemano
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

RE:Problemas con Store con XML

Publicado por Isaias (3308 intervenciones) el 18/01/2008 01:21:43
En la red (www), tienes muchas ligas y muchos ejemplos:

http://technet.microsoft.com/es-es/library/ms190936.aspx

http://www.elguille.info/colabora/NET2005/Percynet_FuncionalidadXML_en_SQLServer.htm

http://www.15seconds.com/issue/001102.htm

http://www.topxml.com/sql/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Store con XML

Publicado por Andres (27 intervenciones) el 18/01/2008 15:20:33
Gracias por los links, estuve intentando este codigo pero me da un mensaje de error.
¿Que es lo que estoy haciendo mal?
----------------------------------------------------------------------------------------------------
declare @mydata xml

select @mydata = (select * from openquery(SV_DBF,
'SELECT DISTINCT cab.numero, cab.codigo, det.costo, det.precio
FROM cab
LEFT JOIN det ON cab.numero = det.numero
ORDER BY cab.numero, det.precio') for xml auto)

----------------------------------------------------------------------------------------------------
Mensaje de Error
------------------------
No se pueden usar tablas sin nombre como identificadores XML y tampoco se pueden usar columnas sin nombre para nombres de atributo. Dé nombre a las columnas o tablas sin nombre usando AS en la instrucción SELECT.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Store con XML

Publicado por Isaias (3308 intervenciones) el 18/01/2008 19:03:12
Andres

El mensaje de error es muy claro, se refiere a que si tu haces un SELECT *, No estas dando nombre a tus columnas, deberias utilizar el AS alias, ejemplo

SELECT * AS Columnax FROM TuTabla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Store con XML

Publicado por Andres (27 intervenciones) el 21/01/2008 13:15:28
Probe este codigo, creo que debo estar fallando en algun concepto sobre xml
Cree un Store llamado QryFac() que en modo de prueba funciona pero en cuanto utilizo del parametro de xml me da error. Mi intencion es que el store me devuelva la variable @tblxml.... para esto le paso por parametro @mydata

ejecuto :
------------
declare @mydata xml
exec QryFac 2008,155,@mydata

ERROR
-----------
Debe declarar la variable escalar "@Tblxml".


------------------------------------------------------------------------------------------------------------------
ALTER PROCEDURE [dbo].[QryFac]
@cAC as varchar(10), @nro smallint, @Tblxml as xml out
AS
BEGIN
declare @cad1 as varchar(500)
declare @cad2 as varchar(500)

set @cad1='SELECT DISTINCT '
+'cabe'+ltrim(STR(@nro))+'.numero,'
+'cabe'+ltrim(STR(@nro))+'.tipo,'
+'deta'+ltrim(STR(@nro))+'.codigo,'
+'deta'+ltrim(STR(@nro))+'.cant,'
+ltrim(STR(00000000))+' as cantiaba'
+' FROM cabe' +ltrim(STR(@nro))
+' LEFT JOIN deta' +ltrim(STR(@nro))
+' ON'
+' cabe'+ltrim(STR(@nro))+'.codigo'
+' ='
+' deta'+ltrim(STR(@nro))+'.codigo'
+' ORDER BY '+'cabe'+ltrim(STR(@nro))+'.nro'

set @cad2 = 'select @Tblxml = (select * from openquery(DBF_CAB'+ ltrim(STR(@cAC))+','''
set @cad2 = @cad2 + @cad1+''') TblTmp for xml auto)'
execute (@cad2)
END
------------------------------------------------------------------------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Store con XML

Publicado por Isaias (3308 intervenciones) el 21/01/2008 19:43:17
Andres

Tu problema, segun veo, es que estas utilizando QUERY DINAMICO, pero estas ocupando VARIABLES dentro de tu query, es por eso que te pide que DEBES DECLARARLAS, ademas, consulta SP_EXECUTESQL, en lugar del EXEC(cadena)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Store con XML

Publicado por andres (27 intervenciones) el 22/01/2008 16:47:04
Isaias, muchas gracias por la ayuda que me has dado, por lo pronto lo he resuelto de esta forma aunque
no es de mi agrado, pues tuve que utilizar lo que no queria (crear una tabla). De todos modos ahora tengo que aprender a dar vuela el xml creado, o sea, en convertirlo en una tabla.

Reemplacé
----------------
...
set @cad2 = 'select @Tblxml = (select * from openquery(DBF_CAB'+ltrim(STR(@cAC))+','''
set @cad2 = @cad2 + @cad1+''') TblTmp for xml auto)'
execute (@cad2)

por estas líneas
------------------------

ALTER PROCEDURE sp_CabDet ..., ..., @Tblxml xml output
...
declare table @TmpCabDet (..., ..., ...,)
...
set @cad2 = 'select * from openquery(DBF_CAB'+ltrim(STR(@cAC))+','''
set @cad2 = @cad2 + @cad1+''')'

INSERT INTO @TmpCabDet execute(@cad2)

SELECT @Tblxml = (SELECT * from @TmpCabDet FOR XML auto, root('DatVF'))
return @Tblxml
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar