У меня есть стол с сотрудниками.Эта таблица имеет столбец (FlagActive), который имеет тип BIT и указывает, является ли сотрудник активным (1) или неактивным (0).
Например, чтобы упростить сценарий, таблица будет иметь вид:
Id |EmployeeName |FlagActive
У меня есть хранимая процедура, которая проверяет, есть ли сотрудник в таблице.Если существует, он делает некоторые вещи.В противном случае это делает другие вещи.Поэтому я делаю следующее:
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 body.Это неверно: если сотрудника не существует, ничего не следует делать.
Тогда я попытаюсь сделать следующее:
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 операции: сначала выберите, чтобы проверить, существует ли сотрудник, и второй (когда я знаю, что сотрудник существует в таблице), чтобы проверить, является ли сотрудник активным или неактивным.
Я хотел бы выполнить эти две операции в операции выбора (тот же выбор)и избегайте двух операций выбора.
Есть идеи?