locked
Resultado XML a variable ? RRS feed

  • Pregunta

  • Estimados.

    En un SS2008 tengo: (la variable @campos debe ser asi pues es dinamica)

    SET @TSQL = 'Select ' + @campos + ' From  ##Tabla FOR XML  PATH(' + '''' + 'tr' + '''' + '), TYPE'

    EXECUTE sp_executesql @TSQL

    El resultado es el esperado, pero quisiera que dicho resultado que es una sola linea la pueda asignar a una variable para luego poder usarla.

    He intentando:

    Declare @rs XML
    SET @ParmDefinition = N'@Resultado XML OUTPUT'

    EXECUTE sp_executesql @TSQL, @ParmDefinition, @Resultado=@rs OUTPUT;
    SELECT @rs

    Pero @rs me devuelve NULL

    Gracias por cualquier ayuda al respecto.

    Atte.

    CristianPM


    DBA SQL Server Santiago/Chile

    jueves, 1 de mayo de 2014 2:20

Respuestas

  • Ve si esto te es de ayuda.

    USE Northwind;
    GO
    DECLARE
    	@sql nvarchar(MAX),
    	@columns nvarchar(MAX),
    	@x xml;
    
    
    SELECT @columns = N'CustomerID AS [Order/@CustomerID], OrderID AS [Order/@OrderID]';
    SET @sql = N'SET @x = (SELECT TOP(10)' + @columns + N' FROM dbo.Orders ORDER BY OrderID FOR XML PATH(''''), ROOT(''Orders''), TYPE);'
    
    EXEC sp_executesql @sql, N'@x xml OUTPUT', @x OUTPUT;
    
    SELECT @x AS x;
    GO
    /*
    
    <Orders>
      <Order CustomerID="VINET" OrderID="10248" />
      <Order CustomerID="TOMSP" OrderID="10249" />
      <Order CustomerID="HANAR" OrderID="10250" />
      <Order CustomerID="VICTE" OrderID="10251" />
      <Order CustomerID="SUPRD" OrderID="10252" />
      <Order CustomerID="HANAR" OrderID="10253" />
      <Order CustomerID="CHOPS" OrderID="10254" />
      <Order CustomerID="RICSU" OrderID="10255" />
      <Order CustomerID="WELLI" OrderID="10256" />
      <Order CustomerID="HILAA" OrderID="10257" />
    </Orders>
    
    */


    AMB

    Some guidelines for posting questions...


    jueves, 1 de mayo de 2014 19:21

Todas las respuestas

  • Hola.

    Sin conocer el motivo desde un punto de vista más general, lo que puedo sugerirte es que vuelques el resultado de sq_executesql en una tabla o una variable temporal y que luego recuperes el registro de la forma habitual:

    declare @rs XML
    
    create table #MiXML (rs XML)
    
    ...
    
    insert #MiXML
    exec sp_executesql...
    
    select @rs = rs from #MiXML


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

    jueves, 1 de mayo de 2014 6:41
    Moderador
  • Ve si esto te es de ayuda.

    USE Northwind;
    GO
    DECLARE
    	@sql nvarchar(MAX),
    	@columns nvarchar(MAX),
    	@x xml;
    
    
    SELECT @columns = N'CustomerID AS [Order/@CustomerID], OrderID AS [Order/@OrderID]';
    SET @sql = N'SET @x = (SELECT TOP(10)' + @columns + N' FROM dbo.Orders ORDER BY OrderID FOR XML PATH(''''), ROOT(''Orders''), TYPE);'
    
    EXEC sp_executesql @sql, N'@x xml OUTPUT', @x OUTPUT;
    
    SELECT @x AS x;
    GO
    /*
    
    <Orders>
      <Order CustomerID="VINET" OrderID="10248" />
      <Order CustomerID="TOMSP" OrderID="10249" />
      <Order CustomerID="HANAR" OrderID="10250" />
      <Order CustomerID="VICTE" OrderID="10251" />
      <Order CustomerID="SUPRD" OrderID="10252" />
      <Order CustomerID="HANAR" OrderID="10253" />
      <Order CustomerID="CHOPS" OrderID="10254" />
      <Order CustomerID="RICSU" OrderID="10255" />
      <Order CustomerID="WELLI" OrderID="10256" />
      <Order CustomerID="HILAA" OrderID="10257" />
    </Orders>
    
    */


    AMB

    Some guidelines for posting questions...


    jueves, 1 de mayo de 2014 19:21
  • Mil Gracias, funciono perfecto.

    DBA SQL Server Santiago/Chile

    viernes, 2 de mayo de 2014 14:55