7 de marzo de 2014

T-SQL CROSS APPLY. Leer datos XML en columnas

Recientemente estaba realizando una consulta T-SQL en la que tuve la necesidad de consultar los datos de una lista personalizada de SharePoint 2013.

Al hacer un SELECT de la la vista (UserData) me percaté que en SharePoint 2013 las columnas de la lista se almacenan en un único campo (tp_ColumnSet) con estructura XML.

Para obtener los datos separados en columnas tuve que usar el operador (CROSS APPLY); terminé creando el siguiente procedimiento almacenado que devuelve los datos de la lista (Project Department Cost) en el formato deseado.

 

CREATE PROCEDURE dbo.STPROC_ListData_ProjectDepartmentCost

BEGIN

  DECLARE @ListId VARCHAR(50) = NULL

  SELECT @ListId = tp_ID FROM Lists WHERE tp_Title = 'Project Department Cost'

      

  SELECT TOP 100

    UD.tp_ListId,

    x.c.value('(nvarchar3/text())[1]', 'NVARCHAR(MAX)') AS ProjectUID,

    x.c.value('(float1/text())[1]', 'FLOAT') AS Number,

    x.c.value('(nvarchar1/text())[1]', 'NVARCHAR(MAX)') AS Title,

    UD.tp_ColumnSet

  FROM UserData UD

    CROSS APPLY UD.tp_ColumnSet.nodes('.') x(c)      

  WHERE

    UD.tp_ListId = @ListId       

END

 

Conclusión: Parece ser que en SharePoint 2013 tendremos que tirar del operador CROSS APPLY para recuperar datos de listas.

PD: Esta es la forma que he encontrado, de seguro existe alguna mejor, si alguien tiene otra idea que no dude en compartirla.

No hay comentarios:

Publicar un comentario