J'ai besoin d'écrire une requête SQL qui récupère les enregistrements en fonction des fichiers RoleId
.
par exemple
Pour les autres RoleId, je veux tous les enregistrements de la table sans aucune condition sur la CreatedBy
colonne.
Je fournis un exemple de requête selon mes besoins.
SELECT _t1.*
FROM [dbo].[TblPassDetail] _t1 WITH (NOLOCK)
INNER JOIN [dbo].[TblVisitor] _t2 WITH (NOLOCK) ON _t1.VisitorId = _t2.SrNo
WHERE _t1.LocationId = @LocationId
AND _t1.CreatedBy = (CASE WHEN @RoleId = 1 THEN @LoginUserId ELSE 0 END)
Le problème est que si fourni @RoleId
est 1, j'obtiens tous les enregistrements pour cela LoginUserId
, mais si @RoleId
c'est autre chose que 1, alors je n'obtiens aucun enregistrement en tant qu'enregistrements de vérification SQL pour _t1.CreatedBy = 0
lesquels il n'existe pas dans la table.
Une suggestion sur la façon de réécrire ma requête?
Vous pouvez reformuler la partie difficile de votre WHERE
clause en ceci :
@RoleId = 1 AND _t1.CreatedBy = @LoginUserId
OR
@RoleId <> 1
En d'autres termes, si le RoleId
est 1
, l'utilisateur connecté doit être le créateur. Mais pour les autres RoleId
valeurs, il n'y a pas de dépendance de l'utilisateur connecté. Voici la requête complète :
SELECT _t1.*
FROM [dbo].[TblPassDetail] _t1 WITH (NOLOCK)
INNER JOIN [dbo].[TblVisitor] _t2 WITH (NOLOCK)
ON _t1.VisitorId = _t2.SrNo
WHERE
_t1.LocationId = @LocationId AND
(
(@RoleId = 1 AND _t1.CreatedBy = @LoginUserId) OR
@RoleId <> 1
);
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots