首页 > 解决方案 > SQL Server 返回一个值并检查同一个选择是否存在(一个选择操作)

问题描述

我和员工有一张桌子。此表有一个列 (FlagActive),它是 BIT 类型,并指示员工当前是活动 (1) 还是非活动 (0)。

例如,为了简化场景,表格将是:

身份证 | 员工姓名 | 标记活动

我有一个存储过程来检查表中是否存在员工。如果存在,它会做一些事情。否则它会做其他事情。所以我这样做:

DECLARE @IsActive BIT
SELECT @IsActive = FlagActive FROM Employees WHERE Id = @IdEmployee

IF @IsActive  = 1 
BEGIN
     -- Employee is active: Do some stuff
END
ELSE
BEGIN
    -- Employee is inactive: Do some stuff
END

如果员工始终存在于表上,但如果员工在表上不存在 @IsActive = 0 满足并执行 ELSE 主体,则它工作得很好。这是不正确的:如果员工不存在,则不应执行任何操作。

然后我尝试在下面做:

IF EXISTS(SELECT TOP 1 * FROM Employees WHERE Id = @IdEmployee)
BEGIN
   DECLARE @IsActive BIT    
   SELECT @IsActive = FlagActive FROM Employees WHERE Id = @IdEmployee

   IF @IsActive  = 1 
   BEGIN
       -- Employee is active: Do some stuff
   END
   ELSE
   BEGIN
       -- Employee is inactive: Do some stuff
   END
END

这种方法的问题是我需要做 2 个操作:首先选择检查员工是否存在,其次(一旦我知道员工存在于表中)检查员工是否处于活动状态。

我想在选择操作(相同的选择)中执行这两个操作,并避免执行两个选择操作。

有任何想法吗?

标签: sql-serversql-server-2008sql-server-2008-r2

解决方案


--You could change your IF Exists to just a select Active where employeeId = Id , 
--if it is NULL they don't exist, else select the active value.

 DECLARE @isActive BIT

--Instead of IF EXISTS, just set the BIT value to whatever is returned,
--If NULL they don't exist
SET @isActive =  SELECT TOP 1 [FlagActive] FROM Employees WHERE Id = @IdEmployee

   IF @isActive IS NOT NULL
   BEGIN

       IF @IsActive  = 1 
       BEGIN
          -- Employee is active: Do some stuff
       END
       ELSE
       BEGIN
          -- Employee is inactive: Do some stuff
       END
   END

推荐阅读