Я хочу написать некоторый код, который возвращает все записи таблицы, если я выберу код отделения как пустой.
Но когда я выбираю код филиала, он должен возвращать запись только для определенного филиала.
declare
@BRANCHCODE varchar(4)
set @BRANCHCODE=''
if (@BRANCHCODE='')
begin
SELECT ID,BRANCHCODE,BRANCHNAME,DEPARTMENTCODE,DEPARTMENTNAME FROM RATINGLOGS
WHERE BRANCHCODE in (SELECT BRANCHCODE FROM RATINGLOGS)
end
else
begin
SELECT ID,BRANCHCODE,BRANCHNAME,DEPARTMENTCODE,DEPARTMENTNAME FROM RATINGLOGS
WHERE BRANCHCODE=@BRANCHCODE
end
Над кодом вернитесь нормально.
Теперь я хочу использовать это условие в выражении case условия where. Код указан ниже:
declare
@BRANCHCODE varchar(4)
set @BRANCHCODE=''
SELECT ID,BRANCHCODE,BRANCHNAME,DEPARTMENTCODE,DEPARTMENTNAME FROM RATINGLOGS
WHERE BRANCHCODE in (Case when @BRANCHCODE='' then (SELECT BRANCHCODE FROM RATINGLOGS) else @BRANCHCODE end)
Возвращается нормально, когда я устанавливаю конкретный код филиала. Такие как
set @BRANCHCODE='1001'
Но его возвращение неверно:
Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.
Когда я использую
set @BRANCHCODE = ''
** Это упоминание, что я использую
BRANCHCODE in ()
, таких как поддержка более 1 значения. Я не использую (=,! =, <, <=,>,> =). Но это идет не так. **
Мне нужно объяснение вопроса и, если возможно, использование оператора case в предложении where, каким будет код перезаписи?