Mahesh@Dev Ответов: 2

Подзапрос вернул более 1 значения. Это недопустимо, когда подзапрос следует за=, ! =, <, <= , >, >= или когда подзапрос используется в качестве выражения.


declare @YearIdno int
declare @Date datetime
declare @UserId int

set @YearIdno=2
set @Date=getdate()
set @UserId=8

select * from LocationMaster where LocationId in (case when @UserId!=1 then (select LocationId from UserWHStoreDetail where UserId=@UserId) else LocationId end)


Что я уже пробовал:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

2 Ответов

Рейтинг:
1

OriginalGriff

Сообщение об ошибке довольно явное:

Subquery returned more than 1 value. This is not permitted when ... the subquery is used as an expression.
Таким образом, ваш выбор возвращает слишком много значений:
select LocationId from UserWHStoreDetail where UserId=@UserId
Поскольку похоже, что вы пытаетесь вернуть несколько значений, рассматривали ли вы соединение вместо IN?
Я не могу дать вам точный запрос, так как у меня недостаточно данных, но похоже, что идентификатор пользователя должен быть в состоянии связать эти две таблицы?


Mahesh@Dev

Спасибо @OriginalGriff

OriginalGriff

Всегда пожалуйста!

Рейтинг:
1

Christiaan van Bergen

Вы используете подзапрос в качестве выражения в вашем case-операторе, который возвращает более одного результата. Тупым решением было бы увеличить количество записей, возвращаемых в вашем подзапросе, например

select TOP 1 LocationId from UserWHStoreDetail where UserId=@UserId
Но будьте осторожны: это новое поведение, которое вы, вероятно, не ожидали, убедитесь, что вы получаете правильную запись. Может быть, ввести порядок по статье.