0

Lorsque j'exécute la requête ci-dessous sur SQL Server, elle fonctionne correctement avec une ou plusieurs valeurs uniques. Mais lorsque j'essaie d'exécuter la même chose sur le jeu de données SSRS, une erreur est générée pour plusieurs valeurs.Une expression de type non booléen spécifiée dans un contexte où une condition est attendue près de ','

ERROR: SSRS: An expression of non boolean type specified in a context where a condition is expected near ','. Incorrect syntax near the keyword 'ELSE'.

Fonctionne correctement avec une valeur unique. Vous ne savez pas quel est le problème ou existe-t-il un autre moyen d'écrire cette requête?

DECLARE @UserTeam VARCHAR(max) = 'Team1,Team2,Team3,Team4,Team5,Team6,''' 

-- Values can inculdes null. if user select blank and Team1,Team2 we need to pull data which is null, Team1, Team2 
IF Object_id('tempdb.dbo.#Team', 'U') IS NOT NULL 
    DROP TABLE #team; 

SELECT item AS Team 
INTO #team 
FROM dbo.FNSPLIT(@UserTeam, ',') 

IF @UserTeam = '' 
    BEGIN 
     SELECT U.username, 
      T.teamcode 
     FROM [User].vwuser u 
      LEFT JOIN[User].userteam UT 
        ON U.userid = UT.userid 
      LEFT JOIN [User].team AS T 
        ON T.teamid = Ut.teamid 
     WHERE T.teamcode IS NULL 
     ORDER BY U.username 
    END 
ELSE 
    BEGIN 
     SELECT U.username, 
      T.teamcode 
     FROM [User].vwuser u 
      LEFT JOIN [User].userteam UT 
        ON U.userid = UT.userid 
      LEFT JOIN [User].team AS T 
        ON T.teamid = Ut.teamid 
      JOIN #team tm 
       ON T.teamcode = tm.team 
     WHERE (U.username NOT LIKE '%System%') 
     ORDER BY U.username 
    END 

Répondre

0

je pouvais compris ce qui est la question. C'est parce que le paramètre UserTeam n'accepte pas plusieurs sélections. Pour résoudre j'ai ajouté l'expression ci-dessous.

=JOIN(Parameters!UserTeam.Value,",") 

Propriétés du dataset -> paramètres -> @UserTeam -> ajouter une expression. Fondamentalement, il délimitera les valeurs séparées par une virgule et la fonction split dbo.fnSplit (@UserTeam, ',') se convertira en une table.

J'ai aussi changé une requête d'une meilleure façon, sans condition IF

SELECT U.userName, T.teamCode 
FROM [User].vwUser u 
    left join [User].UserTeam UT ON U.userId = UT.userId 
    left join [User].Team AS T ON T.teamId = Ut.teamId 
WHERE   
    U.userName NOT LIKE '%System%' 
    AND ISNULL(T.teamCode,'') IN (SELECT ISNULL(item,'') FROM dbo.fnSplit(@UserTeam,',')) 
ORDER BY U.userName 
0

Vous pouvez exécuter la phrase suivante, pour tester la fonction fnSplit:

DECLARE @UserTeam VARCHAR (MAX) = 'Equipe1, Team2, Team3, Team4, Team5, Team6,' ''

élément SELECT AS équipe dbo.fnSplit (@UserTeam, '')

Si la fonction ci-dessus fonctionne correctement, vous verrez sept lignes:

  • Equipe1
  • Team2
  • Team3
  • Team4
  • Team5
  • Team6
  • « (Apostrophe)
+0

Oui, je donné « » pour représenter comme nulle pour expliquer. Parce que je ne suis pas sûr quelle est la valeur qu'il passe si je sélectionne vide déposé dans le paramètre SSRS – crony