[Code] Crear una tabla a partir de un texto separado por comas (CSV)

Ahora con la aparición de los parámetros tipo tabla en SqlServer, se elimina la necesidad de crear parametros complejos o de trucos para enviar información hacia los procedimientos almacenados, pero para quienes no quieren enviar esta información, crear los tipos de datos que se requieren para recibir los parámetros tipo tabla, presento una alternativa para ello en varias aproximaciones

Función de usuario para la generación de Tablas

--USO: select * from fnCSV2Table('1,2,3,4,5,6,7,8',default)
--Convierte una CSV a una tabla, lo que facilita las consultas
--Reduce la necesidad de consultas dinámicas dentro de los procedimientos almacenados
create function fnCSV2Table(@CSV varchar(max), @Separator char(1) = ',')
returns @list table (data int)
as
Begin
declare @SecondIndex int
declare @FirtsIndex int

set @SecondIndex = charindex(@Separator,@CSV)
set @FirtsIndex = 0

if @SecondIndex > 0 set @CSV = @CSV + @Separator

while (@SecondIndex > 0)
Begin
insert into @list values(substring(@CSV,@FirtsIndex,@SecondIndex - @FirtsIndex))
set @FirtsIndex = @SecondIndex + 1
set @SecondIndex = charindex(@Separator,@CSV,@FirtsIndex)
End
if @FirtsIndex =0 and len(@CSV)>0
insert into @list values(@CSV)
return
End
go

--USO: select * from fnConvertCSV2TextTable('1,2,3,4,5,6,7,8',default)
--Convierte una CSV a una tabla (tipo texto), lo que facilita las consultas
--Reduce la necesidad de consultas dinámicas dentro de los procedimientos almacenados
create function fnConvertCSV2TextTable(@CSV varchar(max), @Separator char(1) = ',')
returns @list table (data varchar(8000))
with encryption
as
Begin
declare @SecondIndex int
declare @FirtsIndex int

set @SecondIndex = charindex(@Separator,@CSV)
set @FirtsIndex = 0

if @SecondIndex > 0 set @CSV = @CSV + @Separator

while (@SecondIndex > 0)
Begin
insert into @list values(substring(@CSV,@FirtsIndex,@SecondIndex - @FirtsIndex))
set @FirtsIndex = @SecondIndex + 1
set @SecondIndex = charindex(@Separator,@CSV,@FirtsIndex)
End
if @FirtsIndex =0 and len(@CSV)>0
insert into @list values(@CSV)
return
End
go

Es posible que no sea la aproximación mas óptimizada desde el punto de vista programación T-Sql, pero si es seguro, soluciona el problema de una manera simple y facil de administrar

Cómo Usuarla

Una vez convertida a tabla podemos usarla en un join para filtrar los datos que queremos consultar, podemos usar Cross Apply para aplicar a cada registro la función, etc., la idea es generar una tabla y poderla utilizar facilmente dentro de nuestro código

FREDDY LEANDRO ANGARITA CASTELLANOS
Sql Server MVP

 

Un comentario sobre “[Code] Crear una tabla a partir de un texto separado por comas (CSV)”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *