在存储过程中编写 If 方法的替代方法
Alternate method to write the If method in the stored procedure
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
在上面的存储过程中,当 @Getactiveonly
为真时,它应该只接受活动用户,否则它应该同时接受活动用户和非活动用户。即 IF (@GetactiveOnly = 1)
然后它将获取 Isactive
为 1 的用户,否则它会获取所有 IsActive
为 0 的用户以及 1。
是否可以用更简单的方式来避免重复 select 语句?
您可以应用更多的布尔逻辑,从而生成此统一查询:
SELECT ...
WHERE portalUser.Email = @Email
AND (@GetActiveOnly = 0 OR portalUser.IsActive = 1)
文字:
- 对于 0,第一部分为真,使第二部分无关紧要。
- 对于 1,第一部分为 FALSE,然后第二部分决定结果。
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
在上面的存储过程中,当 @Getactiveonly
为真时,它应该只接受活动用户,否则它应该同时接受活动用户和非活动用户。即 IF (@GetactiveOnly = 1)
然后它将获取 Isactive
为 1 的用户,否则它会获取所有 IsActive
为 0 的用户以及 1。
是否可以用更简单的方式来避免重复 select 语句?
您可以应用更多的布尔逻辑,从而生成此统一查询:
SELECT ...
WHERE portalUser.Email = @Email
AND (@GetActiveOnly = 0 OR portalUser.IsActive = 1)
文字:
- 对于 0,第一部分为真,使第二部分无关紧要。
- 对于 1,第一部分为 FALSE,然后第二部分决定结果。