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