我想改变WHERE
基于输入参数值的查询子句。我猜这是可能的,但似乎我正在以错误的方式接近它?
我的 SP 查询的简化版本:
CREATE PROCEDURE [dbo].[GetMailboxMessagesByStatus]
@UserId UNIQUEIDENTIFIER,
@MessageStatus INT
AS
BEGIN
SELECT *
FROM MailboxMessages m
WHERE
CASE @MessageStatus
WHEN 4 THEN m.SenderId = @UserId --Sent
ELSE m.RecipientId = @UserId --Inbox
END
END
GO
不需要 case 或 iif 构造:
WHERE @MessageStatus = 4 AND m.SenderId = @UserId
OR @MessageStatus <> 4 AND m.RecipientId = @UserId
编辑:
当查询的表非常大时,请注意使用此构造的大表。使用 IF 语句使用 2 个单独的查询,例如林彻斯特建议可能是更好的解决方案。防止参数嗅探可能也是个好主意
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)