次のSELECTステートメントがあります
SELECT
UserID
,UserName
,TradingParty
,Email
,[PrivDesc]
,LastLogin
,IsApproved
FROM
cte_getAll allUsers
WHERE
allUsers.TradingParty = COALESCE(@TradingParty, allUsers.TradingParty)
AND allUsers.Username = COALESCE(@Username, allUsers.Username)
AND allUsers.Email = COALESCE(@EmailAddress, allUsers.Email)
AND DATEADD(dd, DATEDIFF(dd, 0, allUsers.[LastLogin]), 0) >= COALESCE(@FromDate, DATEADD(dd, DATEDIFF(dd, 0, allUsers.[LastLogin]), 0))
AND DATEADD(dd, DATEDIFF(dd, 0, allUsers.[LastLogin]), 0) <= COALESCE( @ToDate, DATEADD(dd, DATEDIFF(dd, 0, allUsers.[LastLogin]), 0))
AND allUsers.IsApproved = COALESCE(@AccountActive, allUsers.IsApproved)
AND allUsers.[PrivId] -- IN (SELECT privId from @selectedPriv)
IN (COALESCE((SELECT PrivID FROM @selectedPriv), allUsers.[PrivId]))
編集 このステートメントの前に、ユーザーの入力に従って@selectedPriv一時テーブルにデータを入力しています。ユーザー入力がない場合、テーブルには何も含まれません
最後の AND ステートメントで、privId がユーザーが入力した特権のリストと等しいすべてのデータを検索しようとしています。したがって、たとえば、ユーザーは一時テーブルに格納されている 1,2,3,4,5,6 を入力します。これから、これらの特権に関連付けられている元のテーブルからすべての行を見つける必要があります。コメント付きのINステートメントを使用すると問題が発生しますが、ユーザーはNULLを渡すことが許可されているため、COALESCE内で必要ですが、これを行うとメッセージが表示されます
サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。
これがなぜなのか、私には手がかりがありません。この問題を解決するのに役立つアイデアはありますか?