TransWikia.com

SQL WHERE IN - Reporting services an error has occurred during report processing. Incorrect syntax near ','

Stack Overflow en español Asked by Elton on November 27, 2021

No estoy acostumbrado a trabajar con SSRS, pero por requisitos de un proyecto me encuentro con esta necesidad.
Estoy creando un report en el cual necesito listar una serie de áreas de trabajo y el resultado es un filtro multiárea para que se pueda selecionar, uno, varios o todos.
El problema viene a la hora de seleccionar más de un filtro. Cuando selecciono dos o más casillas, me aparece el siguiente mensaje de error a la hora de generar el informe:

"An error occurred during local report processing. An error has occurred during report processing. Query execution failed for Dataset ‘Eventos’. Incorrect syntax near ‘,’."

La Query que realizo contra el Dataset ‘Eventos’, es la siguiente:

 IF @TipoEvento=1
         BEGIN
            SELECT  [Alarm_Id] 
                ,[Start_Time]
                ,[NombreTag] 
                ,[Descrip]
                ,[Areas]
                ,[Nuevo]
                ,[Anterior]
                ,[Username]
            FROM VW005_Events_Def
            WHERE 
            Areas IN
                (SELECT [AlarmArea] FROM [FIXALARMS].[dbo].[TB001_ZonaArea]     Where [Zona] IN (@zona))
            AND (Start_Time BETWEEN @StartTime AND DATEADD(s, 1, @EndTime)) AND  
            AND (Descrip LIKE '%'+@fdesc+'%') 
            AND ((NombreTag NOT LIKE '%_SPAN') OR (NombreTag NOT LIKE '%_OFFSET') 
                  OR (NombreTag NOT LIKE '%_WIRE'))
            AND (Descrip NOT LIKE '%AlmODBC%')
        
            ORDER BY Start_Time
         END
            
       ELSE
         BEGIN
            
            SELECT [Alarm_Id]
                  ,[Start_Time]
                  ,[NombreTag]
                  ,[Descrip]
                  ,[Areas]
                  ,[Nuevo]
                  ,[Anterior]
                  ,[Username]
              FROM VW005_Events_Def
            WHERE Areas IN
                (SELECT [AlarmArea] FROM [FIXALARMS].[dbo].[TB001_ZonaArea]     Where [Zona] IN (@zona))     
            AND   (Start_Time BETWEEN @StartTime AND DATEADD(s, 1, @EndTime)) 
            AND (Descrip LIKE '%'+@fdesc+'%') 
            AND ((NombreTag LIKE '%_SPAN') OR (NombreTag LIKE '%_OFFSET') 
                  OR (NombreTag LIKE '%_WIRE'))
            AND (Descrip NOT LIKE '%AlmODBC%')
            ORDER BY Start_Time
            
         END

Para el caso que nos toca, @TipoEvento es igual a 1.
Si ejecuto la parte de la Query que me interesa en SQL funciona correctamente, y si tan sólo marco UN filtro, también funciona. Me da la sensación que no "separa" las comas intermedias del "listado" que busco previamente.

Un saludo y gracias por adelantado.

One Answer

Las cláusulas IN son complicadas con las variables, por lo que se necesita una forma distinta de proceder. Crear una variable de tipo tabla con las @zonas:

DECLARE @zonas TABLE (list varchar(25)) 
INSERT into @zonas
SELECT DISTINCT Zona FROM TB001_ZonaArea

Y ajustar el WHERE

WHERE [Zona] in ( select list from @zonas ) 

Otra forma mas directa, si la seleccion no requiere un proceso muy complicado:

WHERE [Zona] in ( SELECT DISTINCT Zona FROM TB001_ZonaArea WHERE condition1=value1 ) 

Answered by F.Igor on November 27, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP