我有以下 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 等于用户输入的 privs 列表的所有数据。因此,例如,用户输入存储到临时表中的 1、2、3、4、5、6,从这里我需要从我的原始表中找到与这些 priv 关联的所有行。这是我的问题,如果我使用注释的 IN 语句,它可以工作,但是由于允许用户传入 NULL,我需要在 COALESCE 中使用它,但是当我这样做时,我会收到消息
子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。
我不知道为什么会这样。有什么想法可以帮助我解决这个问题吗?