jueves, 11 de julio de 2013

CURSOR Y SQL DINAMICO

Un ejemplo de un cursor con SQL Dinamico que muchas veces es nuestra ultima alternativa a una solucion , pero nos ayuda a resolver problemas a nivel de base de datos
CREATE PROCEDURE CURSORDINAMICO -- 1,'001,003,004,006,005,002,007,007'
@FirstParamters NUMERIC(2),
@StringValues VARCHAR(MAX)
as 
 -- Declaración del cursor
declare @Valor1 VARCHAR(MAX) = ''
declare @Valor2 VARCHAR(MAX) = ''
declare @Resultado VARCHAR(MAX)= ''
declare @Contador numeric = 0

DECLARE CursorSplit CURSOR
FOR
    select * from dbo.split(@StringValues,',')
-- Open Cursor
OPEN CursorSplit
--Reading First row
FETCH CursorSplit INTO  @Valor1  , @Valor2
WHILE (@@FETCH_STATUS = 0)
BEGIN
--Reading Second row
     if(@Valor2 != '')
    begin
        if(@Contador = 0)
                    begin 
                        set  @Resultado =  CHAR(39) + ' and XXX LIKE ' + CHAR(39)  + '%' + @Valor2  + '%' + CHAR(39) 
                    end
        else
                    begin
                            set  @Resultado =@Resultado  + ' or XXX LIKE ' + CHAR(39)  + '%' + @Valor2  + '%' + CHAR(39)
                    end
                set     @Contador = @Contador+1
        end    
    FETCH CursorSplit INTO  @Valor1  , @Valor2
END -- end loop while
CLOSE CursorSplit
DEALLOCATE CursorSplit

DECLARE @TSQL  VARCHAR(MAX)
SET @TSQL  = ' SELECT XXX,XXX,XXX
                            FROM XXX 
                            where XXX LIKE ''%' +RTRIM(CONVERT(CHAR(2),@FirstParameter)) + '%'  + @Resultado 
--SELECT @TSQL   AS TSQL
EXEC (@TSQL )

go


No hay comentarios:

Publicar un comentario