sql-server - 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 个操作:首先选择检查员工是否存在,其次(一旦我知道员工存在于表中)检查员工是否处于活动状态。
我想在选择操作(相同的选择)中执行这两个操作,并避免执行两个选择操作。
有任何想法吗?
解决方案
--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
推荐阅读
- javascript - 在 CHROME 中添加 javascript 和小 css 后,ASPX 页面以 110% 缩放打开
- pact - 提供程序测试与协议代理的集成,用于 Spring Boot junit5 + 应用程序属性中的配置
- docker - 詹金斯码头图像问题
- azure-data-factory - 天蓝色数据工厂查找活动 - 参数化 sql 查询
- excel - 检查列并复制是否相同
- rxjs - RxJS 仅从内部 Observable 取消订阅
- reporting-services - SSRS2016 将秒转换为 hh:mm:ss 格式
- sql - 有向图数据结构的最佳数据库模型是什么?
- python - 如何使用 pandas 数据框作为模板在 SQL Server 数据库中创建表?
- swift - 如何通过 SwiftUI 中的状态变量为形状设置动画?