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
In der oben gespeicherte Prozedur zu schreiben, wenn @Getactiveonly
wahr ist, dann sollte es nehmen nur die Benutzer, die sonst aktiv sind es sowohl aktive als auch inaktive Benutzer nehmen soll. d.h IF (@GetactiveOnly = 1)
dann wird es den Benutzern holen, deren Isactive
1 nur sonst es alle Benutzer IsActive
deren holt 0 und 1.Alternative Methode der Methode Wenn in der gespeicherten Prozedur
dies auf einfachere Art und Weise geschrieben werden können, um Doppel select-Anweisungen zu vermeiden?
Da @Peter ja geantwortet hatte, ist es möglich. Ich rate Ihnen nur, die Abfragepläne für beide Versionen zu überprüfen. Manchmal kann OR zu Problemen führen. – Serg