none
linkedserver y FOR XML AUTO RRS feed

  • Pregunta

  • Buenas Noches

    El día de hoy tuve la necesidad de crear un linked server a una base de datos de un proveedor para ejecutar un sp que devuelve la respuesta en un xml con la sentencia FOR XML AUTO.

    Cuando probé el SP funciona correctamente, sin embargo al intentar realizar la ejecución desde el linked server, el sistema me devolvió un string gigante con un valor tipo 0x440A7300690061005F006500760065006E0074006F0044127300690... 

    Buscando una solución al problema encontré el siguiente post:

    http://phe1129.wordpress.com/2008/05/23/linked-server-and-xml/

    Aquí me presentaron la solución al problema, sin embargo cuando ejecuto mi stored procedure, se me presenta el siguiente Error:

    OLE DB provider "STREAM" for linked server "(null)" returned message "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".

    Msg 0, Level 11, State 0, Line 0
    Error grave en el comando actual. Los resultados, si los hay, se deben descartar.

    Alguna Idea??

    OBS:

    - Estoy trabajando con SQL SERVER 2008 R2 en ambas Bases de datos.

    - El stored Procedure recibe dos parámetros de la otra base de datos, por lo que debo hacer el linked server para poder enviárselos. 

    - El xml que retorna el sp devuelve muchísimos datos, por lo que no puedo devolverlo como un NVARCHAR(MAX) o podría truncarme la respuesta

    - este xml es para utilizarlo en una orquestación en Biztalk por lo que debo retornar este xml.

    MIL GRACIAS


    I'm Addict to Knowledge

    miércoles, 29 de febrero de 2012 0:55

Respuestas

  • Hola Alberto

    Bueno la situación es la siguiente:

    Existe en la empresa un software licenciado que tiene una BD sql server 2008 R2. este contiene información que es importante para el proceso que estoy desarrollando. Con el fin de mantener la garantía del software, la interacción con el mismo debe ser mínima. Por otro lado tenemos un servidor de base de datos de aplicaciones propietarias que es al único que le podemos montar objetos, tablas, sp's, etc. Tenemos una consulta que nos retorna unos datos importantes para nuestro proceso pero no podemos obtener todos los datos por que son miles de millones de registros, por tanto solo obtenemos los datos que se encuentran en un rango de fechas. 

    en la BD de la aplicación licenciada se creó un stored procedure en algún momento para algún proceso de la aplicación. Nosotros reutilizamos el sp, pero necesitamos llamarlo desde nuestro servidor de BD de aplciaciones, lo que se solucionó con un linked server. al llamar el sp, podemos enviarle las fechas, ya que la fecha inicial del rango se tiene en una base de datos de nosotros. Se realizó la consulta y este sp devuelve los datos correctamente. Sin embargo necesitábamos los datos en formato XML para poderlos montar en una orquestación en Biztalk.

    Lo que hicimos finalmente fué poner el resultado del sp en una variable tipo tabla y acto seguido realizar un select a la misma con formato xml. Ya con esto funcionó correctamente. Sin embargo me queda la duda de por qué nunca nos funcionó el for xml en el sp traído del linked server.

    Mil gracias 


    I'm Addict to Knowledge

    martes, 6 de marzo de 2012 13:18

Todas las respuestas

  • Qué hace ese procedimiento? Una simple SELECT o hace más operaciones?
    miércoles, 29 de febrero de 2012 8:11
  • Hola Carlos

    El procedimiento realiza un select con join en varias tablas, sin embargo, requiere dos parámetros.

    Mil Gracias


    I'm Addict to Knowledge

    miércoles, 29 de febrero de 2012 13:50
  • Hola.

    Que recibas los parámetros de otra base de datos no es justificación suficiente como para ejecutar la operación desde servidor vinculado. ¿Qué es lo que invoca el procedimiento? Será una aplicación, así que podrías cambiar la conexión y así ejecutar el procedimiento almacenado en local, obtendrías el resultado como esperas y sin tanta complejidad.

    Por favor, pásanos todo el contexto, seguramente así podremos guiarte de forma más precisa.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    domingo, 4 de marzo de 2012 13:38
    Moderador
  • Hola Alberto

    Bueno la situación es la siguiente:

    Existe en la empresa un software licenciado que tiene una BD sql server 2008 R2. este contiene información que es importante para el proceso que estoy desarrollando. Con el fin de mantener la garantía del software, la interacción con el mismo debe ser mínima. Por otro lado tenemos un servidor de base de datos de aplicaciones propietarias que es al único que le podemos montar objetos, tablas, sp's, etc. Tenemos una consulta que nos retorna unos datos importantes para nuestro proceso pero no podemos obtener todos los datos por que son miles de millones de registros, por tanto solo obtenemos los datos que se encuentran en un rango de fechas. 

    en la BD de la aplicación licenciada se creó un stored procedure en algún momento para algún proceso de la aplicación. Nosotros reutilizamos el sp, pero necesitamos llamarlo desde nuestro servidor de BD de aplciaciones, lo que se solucionó con un linked server. al llamar el sp, podemos enviarle las fechas, ya que la fecha inicial del rango se tiene en una base de datos de nosotros. Se realizó la consulta y este sp devuelve los datos correctamente. Sin embargo necesitábamos los datos en formato XML para poderlos montar en una orquestación en Biztalk.

    Lo que hicimos finalmente fué poner el resultado del sp en una variable tipo tabla y acto seguido realizar un select a la misma con formato xml. Ya con esto funcionó correctamente. Sin embargo me queda la duda de por qué nunca nos funcionó el for xml en el sp traído del linked server.

    Mil gracias 


    I'm Addict to Knowledge

    martes, 6 de marzo de 2012 13:18