ALTER PROCEDURE [User].GetUserByEmail
@Email VARCHAR(200),
@GetActiveOnly BIT
AS
BEGIN
IF (@GetActiveOnly = 1)
BEGIN
SELECT
portalUser.PortalUserId AS 'UserId',
organisation.OrganisationId AS 'OrganisationId',
organisation.LookUpOrganisationTypeId AS 'OrganisationTypeId'
FROM
Admin.PortalUser portalUser
INNER JOIN
Admin.LookUpPortalUserRole userRole ON userRole.LookUpPortalUserRoleId = portalUser.LookUpPortalUserRoleId
INNER JOIN
Admin.Organisation organisation ON organisation.OrganisationId = portalUser.OrganisationId
WHERE
portalUser.Email = @Email
AND portalUser.IsActive = 1
END
ELSE
BEGIN
SELECT
portalUser.PortalUserId AS 'UserId',
organisation.OrganisationId AS 'OrganisationId',
organisation.LookUpOrganisationTypeId AS 'OrganisationTypeId'
FROM
Admin.PortalUser portalUser
INNER JOIN
Admin.LookUpPortalUserRole userRole ON userRole.LookUpPortalUserRoleId = portalUser.LookUpPortalUserRoleId
INNER JOIN
Admin.Organisation organisation ON organisation.OrganisationId = portalUser.OrganisationId
WHERE
portalUser.Email = @Email
END
END
Dans la procédure stockée ci-dessus, lorsque @Getactiveonly
est vrai, alors il ne devrait prendre que les utilisateurs actifs sinon il devrait prendre les deux utilisateurs actifs et inactifs. i.e. IF (@GetactiveOnly = 1)
alors il va chercher les utilisateurs dont Isactive
est 1 que sinon il va chercher tous les utilisateurs dont IsActive
est 0 et 1.méthode pour écrire la méthode Si dans la procédure stockée
pourrait-il être écrit d'une manière plus simple d'éviter la duplication des instructions select?
Comme @Peter avait répondu oui c'est possible. Je vous conseille seulement de vérifier les plans de requête pour les deux versions. Parfois, OU peut entraîner des problèmes. – Serg