Я нахожусь на SQL Server 2005, и я получаю сообщение об ошибке, которое, я уверен, не должен получать.Подзапрос в предложении IN(), вызывающем ошибку
Msg 512, Level 16, State 1, Procedure spGetSavedSearchesByAdminUser, Line 8 Subquery
returned more than 1 value. This is not permitted when the subquery
follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Я следую пример # B на this MSDN ссылку.
Мой сохраненный код proc выглядит следующим образом. Я могу упростить его ради этого поста, если вы запрашиваете так:
ALTER PROCEDURE [dbo].[spGetSavedSearchesByAdminUser]
@strUserName varchar(50)
,@bitQuickSearch bit = 0
AS
BEGIN
SELECT [intSearchID] ,strSearchTypeCode ,[strSearchName]
FROM [tblAdminSearches]
WHERE
strUserName = @strUserName
AND
strSearchTypeCode
IN (
CASE @bitQuickSearch
WHEN 1 THEN 'Quick'
ELSE (SELECT strSearchTypeCode FROM tblAdvanceSearchTypes)
END
)
ORDER BY strSearchName
END
Я проверил нет несоответствия типов данных между результирующим из подзапроса и strSearchTypeCode подзапрос результат сравнивается с.
Я не вижу причин, почему это не должно работать. Если у вас есть какие-либо подсказки, пожалуйста, дайте мне знать.
Я бы сделал это UNION ALL, так как даже если у вас есть обманы, это не имеет особого значения в предложении IN. – 2008-10-02 16:47:05