jueves, 12 de abril de 2012

Crear una tabla desde una lista separada por comas

La siguiente función devuelve una tabla desde una lista de números separados por comas:
FUNCTION [dbo].[fnSplitCSVxml] 
               (@NumberList VARCHAR(4096)) 
RETURNS @SplitList TABLE( ListMember INT) 
AS 
  BEGIN 
    DECLARE  @xml XML 
    SET @NumberList = LTRIM(RTRIM(@NumberList)) 
    IF LEN(@NumberList) = 0 
      RETURN 
    SET @xml = '' + REPLACE(@NumberList,',','') + '' 
    INSERT INTO @SplitList 
    SELECT x.i.value('.','VARCHAR(MAX)') AS Member 
    FROM   @xml.nodes('//n') x(i) 
    RETURN 
  END 

Tiene diversas aplicaciones del tipo:
SELECT A from B Where B.c in dbo.fnSplitList(@cadena)
Pero es especialmente interesante para informes de Report Server que usen parametros con multiples valores.