我经常遇到这样的情况,我可以像这样编写 t-sql 查询的条件......
DECLARE @FirstName NVARCHAR(500)
SET @FirstName ='Joe'
SELECT *
FROM dbo.Customers c
WHERE
CASE
WHEN @FirstName <> '' THEN
CASE WHEN c.FirstName= @FirstName THEN 1 ELSE 0 END
ELSE 1
END = 1
或者像这样...
SELECT *
FROM dbo.Customers c
WHERE
(@FirstName = '' OR (@FirstName <> '' AND c.FirstName = @FirstName))
它们都产生相同的结果,并且两个查询计划似乎相同。
所以我很好奇哪一个是最佳实践,或者一个比另一个有什么陷阱?