"Same" consultations, different results

0

There are hidden data to be sensitive.

I've been thinking about it for a few hours now.

I have a stored procedure for navigation (in development) and another for printing a Grid.

What is my problem ?! That gives me different results !!

The following procedure is the one I use to get the data from the grid.

Data:

@FechaVisitaDesde = N'13/07/2017',
@FechaVisitaHasta = N'13/09/2017',
@Holons = N'CC01,CC02,CC03,CC04,CC05,CC06,CE01,CE02,CL01,CL02,CL03,CL04,CN01,CN02,CN03,CN04,CN05,CN06,CN07,CO01,CP01,CP02,CP03,CP04,CS01,CS02,CS03,CS04'

Code:

USE [SMCClientesContactosVisitas]
GO
/****** Object:  StoredProcedure [dbo].[proc_Visitas_Sel]    Script Date: 14/09/2017 9:15:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[proc_Visitas_Sel] 
       -- Add the parameters for the stored procedure here   
       @CodigoCliente  nvarchar(12) = null, 
       @NombreCliente  nvarchar(255) = null,
       @FechaVisitaDesde datetime = null,
       @FechaVisitaHasta datetime = null,
       @FechaProximaVisitaDesde datetime = null,
       @FechaProximaVisitaHasta datetime = null,
       @Responsable nvarchar(100) = null,
       @Holon nvarchar(10) = null,
       @Segmento nvarchar(10) = null,
       @Subsegmento nvarchar(10) = null,
       @Holons nvarchar(1000) = null,
       @GruposClientes NVARCHAR(1000) = null,
       @IdGrupo INT = null,
       @Proyecto nvarchar(255) = null,
       @Comentarios nvarchar(255) = null,
       @AccionesMarketing nvarchar(255) = null
AS
BEGIN
       -- SET NOCOUNT ON added to prevent extra result sets from
       -- interfering with SELECT statements.
       SET NOCOUNT ON;

    -- Insert statements for procedure here
        DECLARE @SQL nvarchar(MAX) = N'SELECT FULL_SEARCH.* FROM (SELECT DISTINCT
                    Visitas.IdVisita, 
                    Visitas.CodigoCliente, 
                    Clientes.NombreCliente, 
                    Clientes.Holon, 
                    Clientes.Segmento, 
                    Clientes.Subsegmento as SegmentoActividad, 
                    Clientes.Responsable,             
                    VisitadoPor, 
                    Contactos.NombreContacto as ContactoPrincipal,
                    Relevancias.Titulo as Relevancia,
                    CASE WHEN NOT vc.IdVisita IS NULL THEN dbo.ContactosVisitadosNotResponsable(Visitas.IdVisita) ELSE '''' END  AS ContactosVisitados,
                    Fecha, 
                    FechaProximaVisita,
                    Objetivos,
                    CASE WHEN NOT VisitasAcciones.IdVisita IS NULL THEN dbo.accionesVisita(Visitas.IdVisita) ELSE '''' END  AS Acciones,
                    Comentarios,
                    CASE 
                        WHEN VisitasAnexos.IdVisita IS NOT NULL THEN CONVERT(BIT,1)
                    ELSE  
                        CONVERT(BIT,0)
                    END Anexos
       FROM [dbo].Visitas
             inner join Clientes on Visitas.CodigoCliente = Clientes.CodigoCliente                          
             left join VisitasContactos on Visitas.IdVisita = VisitasContactos.IdVisita And VisitasContactos.Principal = 1
             left join Contactos on VisitasContactos.IdContacto = Contactos.IdContacto  
             left join Relevancias on Contactos.IdRelevancia = Relevancias.IdRelevancia
             LEFT JOIN VisitasAnexos ON VisitasAnexos.IdVisita = Visitas.IdVisita
             LEFT JOIN VisitasAcciones ON VisitasAcciones.IdVisita = Visitas.IdVisita
             LEFT JOIN VisitasContactos vc ON vc.IdVisita = Visitas.IdVisita and vc.Principal <> 1
             LEFT JOIN AccionesMarketingVisitas ON AccionesMarketingVisitas.IdAccionMarketingVisita = VisitasAcciones.IdAccionMarketingVisita
             ';

            IF(@IdGrupo IS NOT NUll AND @IdGrupo != '') BEGIN
                SET @SQL = @SQL + N' LEFT JOIN GruposClientes ON GruposClientes.CodigoCliente = Clientes.CodigoCliente ';
            END

       SET @SQL = @SQL + N' WHERE 
             (@CodigoCliente IS NULL OR @CodigoCliente = '''' OR Visitas.CodigoCliente like ''%'' + @CodigoCliente + ''%'') 
             AND  (@NombreCliente IS NULL OR @NombreCliente = '''' OR Clientes.NombreCliente like ''%'' + @NombreCliente + ''%'')';    
             IF(@FechaVisitaDesde IS NOT NUll AND @FechaVisitaDesde != '') BEGIN
                IF(@FechaVisitaHasta IS NUll OR @FechaVisitaHasta = '')BEGIN
                    SET @FechaVisitaHasta = GETDATE()
                END

                SET @SQL = @SQL + N' AND (CONVERT(DATE,Fecha) BETWEEN CONVERT(DATE,@FechaVisitaDesde) AND  CONVERT(DATE,@FechaVisitaHasta))'
            END       

            IF(@FechaProximaVisitaDesde IS NOT NUll AND @FechaProximaVisitaDesde != '') BEGIN
                IF(@FechaProximaVisitaHasta IS NUll OR @FechaProximaVisitaHasta = '')BEGIN
                    SET @FechaProximaVisitaHasta = GETDATE()
                END

                SET @SQL = @SQL + N' AND (CONVERT(DATE,FechaProximaVisita) BETWEEN CONVERT(DATE,@FechaProximaVisitaDesde) AND CONVERT(DATE,@FechaProximaVisitaHasta))'
            END       

           SET @SQL = @SQL + N'  AND  (@Responsable IS NULL OR @Responsable = '''' OR Visitas.VisitadoPor like ''%'' + @Responsable + ''%'')
             AND  (@Segmento IS NULL OR @Segmento = '''' OR Clientes.Segmento like ''%'' + @Segmento + ''%'')
             AND  (@Subsegmento IS NULL OR @Subsegmento = '''' OR Clientes.Subsegmento like ''%'' + @Subsegmento + ''%'')
             AND  (@Comentarios IS NULL OR @Comentarios = '''' OR Visitas.Comentarios like ''%'' + @Comentarios + ''%'')
             AND  (@Holon IS NULL OR @Holon = '''' OR Clientes.Holon like ''%'' + @Holon + ''%'')
             AND  (@AccionesMarketing IS NULL OR @AccionesMarketing = '''' OR AccionesMarketingVisitas.IdAccionMarketingVisita like ''%'' + @AccionesMarketing + ''%'')';
                     IF(@IdGrupo IS NOT NUll AND @IdGrupo != '') BEGIN
                        SET @SQL = @SQL + N' AND GruposClientes.IdGrupo = @IdGrupo';
                     END
             SET @SQL = @SQL + N' AND  (@Proyecto IS NULL OR @Proyecto = '''' OR Clientes.Proyecto = @Proyecto )) FULL_SEARCH

          WHERE CHARINDEX('','' + FULL_SEARCH.Holon + '','', '','' + @HOLONS + '','') > 0'

            IF(@GruposClientes IS NOT NUll AND @GruposClientes != '') BEGIN
                SET @SQL = @SQL +  N' OR FULL_SEARCH.CodigoCliente IN(
                                                                    SELECT 
                                                                        Clientes.CodigoCliente 
                                                                    FROM 
                                                                        Grupos 
                                                                        INNER JOIN GruposClientes ON GruposClientes.IdGrupo = Grupos.IdGrupo
                                                                        INNER JOIN Clientes ON GruposClientes.CodigoCliente = Clientes.CodigoCliente
                                                                    WHERE  
                                                                        CHARINDEX('','' + CONVERT(varchar(11), Grupos.IdGrupo) + '','', '','' + @GruposClientes + '','') > 0)'
          END

    SET @SQL = @SQL +  N' ORDER BY Fecha DESC'

    DECLARE @Parametros nvarchar(max)
    SET @Parametros = N'@CodigoCliente  nvarchar(12) = null, 
       @NombreCliente  nvarchar(255) = null,'

       IF(@FechaVisitaDesde IS NOT NUll AND @FechaVisitaDesde != '') BEGIN
        SET @Parametros = @Parametros + N'@FechaVisitaDesde datetime = null,
            @FechaVisitaHasta datetime = null,'
       END

        IF(@FechaProximaVisitaDesde IS NOT NUll AND @FechaProximaVisitaDesde != '') BEGIN
            SET @Parametros = @Parametros + N'@FechaProximaVisitaDesde datetime = null,
            @FechaProximaVisitaHasta datetime = null,'
       END

       SET @Parametros = @Parametros + N'@Responsable nvarchar(100) = null,
       @Holon nvarchar(10) = null,
       @Segmento nvarchar(10) = null,
       @Subsegmento nvarchar(10) = null,
       @Holons nvarchar(1000) = null,
       @GruposClientes NVARCHAR(1000) = NULL,
       @IdGrupo INT,
       @Proyecto nvarchar(255),
       @Comentarios nvarchar(255),
       @AccionesMarketing nvarchar(255) = null';

       --PRINT(@Parametros)

    IF(@FechaVisitaDesde IS NOT NUll AND @FechaVisitaDesde != '' AND @FechaProximaVisitaDesde IS NOT NUll AND @FechaProximaVisitaDesde != '') BEGIN
        EXEC sp_executesql @SQL, @Parametros, @CodigoCliente, @NombreCliente, @FechaVisitaDesde, @FechaVisitaHasta, @FechaProximaVisitaDesde, @FechaProximaVisitaHasta, @Responsable, @Holon,@Segmento, @Subsegmento, @Holons, @GruposClientes, @IdGrupo, @Proyecto, @Comentarios, @AccionesMarketing
    END
    ELSE IF (@FechaVisitaDesde IS NOT NUll AND @FechaVisitaDesde != '' AND (@FechaProximaVisitaDesde IS NUll OR @FechaProximaVisitaDesde = '')) BEGIN
        EXEC sp_executesql @SQL, @Parametros, @CodigoCliente, @NombreCliente, @FechaVisitaDesde, @FechaVisitaHasta, @Responsable, @Holon,@Segmento, @Subsegmento, @Holons, @GruposClientes, @IdGrupo, @Proyecto, @Comentarios, @AccionesMarketing
    END
    ELSE IF ((@FechaVisitaDesde IS NUll OR @FechaVisitaDesde = '') AND (@FechaProximaVisitaDesde IS NOT NUll AND @FechaProximaVisitaDesde != '')) BEGIN
        EXEC sp_executesql @SQL, @Parametros, @CodigoCliente, @NombreCliente, @FechaProximaVisitaDesde, @FechaProximaVisitaHasta, @Responsable, @Holon,@Segmento, @Subsegmento, @Holons, @GruposClientes, @IdGrupo, @Proyecto, @Comentarios, @AccionesMarketing
    END
    ELSE BEGIN
        EXEC sp_executesql @SQL, @Parametros, @CodigoCliente, @NombreCliente, @Responsable, @Holon,@Segmento, @Subsegmento, @Holons, @GruposClientes, @IdGrupo, @Proyecto, @Comentarios, @AccionesMarketing
    END

    print @SQL

END

And the result is the following:

IdVisita CodigoCliente NombreCliente Holon  Segmento    SegmentoActividad
33377    J511550000    ****          CP02   CA7         INS
32212    C360690000    ****          CS04   CA1         FME
33375    C084270000    ****          CC03   CA7         INS
33376    C084270000    ****          CC03   CA7         INS
33374    C36032AB62    ****          CS04   CA7         USU
33242    C503150000    ****          CN05   CA9         FME
33243    C04804AC22    ****          CN05   CA1         USU
33244    C50008AA34    ****          CN05   CA7         INS
33257    C281790000    ****          CS01   CA7         FME
33270    J52012AB24    ****          CP02   CA1         USU
33274    ZZZZ00014743  ****          CS01       
33275    J520330000    ****          CP02   CA7 
33276    C28352ZZZZ    ****          CS01   BC4 
33278    J51073AA37    ****          CP02   CA7         FME
33280    ZZZZ00018805  ****          CS01       

Ok, now the problem comes when I try to get the same data for a navigation between visits. The procedure is somewhat more complex than this code, but I wanted to put only the select so you can see the result:

Code:

DECLARE @SQL nvarchar(MAX)
SET @SQL = N'SELECT  
    ROW_NUMBER() over (order by Fecha desc) AS RN, Visitas.IdVisita, Visitas.CodigoCliente, Fecha, NombreCliente, VisitadoP
FROM 
    Visitas
    INNER JOIN  Clientes on Visitas.CodigoCliente = Clientes.CodigoCliente   
WHERE    
    CHARINDEX('','' + Clientes.Holon + '','', '','' + ''CC01,CC02,CC03,CC04,CC05,CC06,CE01,CE02,CL01,CL02,CL03,CL04,CN01,CN02,CN03,CN04,CN05,CN06,CN07,CO01,CP01,CP02,CP03,CP04,CS01,CS02,CS03,CS04'' + '','') > 0
    AND (''13/07/2017'' = '''' or Visitas.Fecha>Convert(DATE,''13/07/2017'',103))
    AND (''13/09/2017'' = '''' or Visitas.Fecha<Convert(DATE,''13/09/2017'',103))
    '
IF('' IS NOT NUll AND '' != '') BEGIN
    SET @SQL = @SQL + N' AND GruposClientes.IdGrupo = @IdGrupo'
END
SET @SQL = @SQL + N'ORDER BY Fecha DESC'
EXEC sp_executesql @SQL

SELECT *
FROM Visitas
ORDER BY Fecha DESC

And the result gives something different !!!

IdVisita CodigoCliente  VisitadoPor VisitadoPorLogin  Fecha
33377    J511550000     ****        SHAREPOINT\system 2017-09-11 00:00:00.000
32212    C360690000     ****        i:0#.w|smc\x4a3   2017-08-28 00:00:00.000
33375    C084270000     ****        SHAREPOINT\system 2017-08-22 00:00:00.000
33376    C084270000     ****        SHAREPOINT\system 2017-08-22 00:00:00.000
33374    C36032AB62     ****        i:0#.w|smc\x1a4   2017-08-10 00:00:00.000
33362    C360390000     ****        i:0#.w|smc\x1a4   2017-08-09 00:00:00.000
33363    C36032AA62     ****        i:0#.w|smc\x1a4   2017-08-09 00:00:00.000
33364    C367010000     ****        i:0#.w|smc\x1a4   2017-08-09 00:00:00.000
33365    C47033ZZZZ     ****        i:0#.w|smc\z1q9   2017-08-09 00:00:00.000
33366    C47010AB12     ****        i:0#.w|smc\z1q9   2017-08-09 00:00:00.000
33367    ZZZZ00002959   ****        i:0#.w|smc\z1q9   2017-08-09 00:00:00.000
33368    C361390000     ****        i:0#.w|smc\x1a4   2017-08-09 00:00:00.000
33355    J54371AC02     ****        i:0#.w|smc\h8b6   2017-08-09 00:00:00.000
33353    J54371AE53     ****        i:0#.w|smc\h8b6   2017-08-09 00:00:00.000
33317    ZZZZ00018816   ****        i:0#.w|smc\h8b6   2017-08-09 00:00:00.000
    
asked by GDP 14.09.2017 в 09:40
source

0 answers