我有一张这样的表:
+-------------+--------------------------------------+--------------------------------------+---------------+
| BackCheckId | TaskId | EmpGuid | CompletedDate |
+-------------+--------------------------------------+--------------------------------------+---------------+
| 1 | B92F7079-2011-44D6-B3C4-BD2F7481C97F | 6074CAEA-7A8E-4699-9451-16C2EAF394EF | NULL |
| 2 | 82AB0C4B-9342-46FA-ACBE-C00B87571BF9 | 6074CAEA-7A8E-4699-9451-16C2EAF394EF | NULL |
+-------------+--------------------------------------+--------------------------------------+---------------+
要创建的查询:
CREATE TABLE Backchecks(
BackCheckId int,
TaskId UNIQUEIDENTIFIER,
EmpGuid UNIQUEIDENTIFIER,
CompletedDate DATETIME
);
INSERT INTO Backchecks VALUES
(1, 'B92F7079-2011-44D6-B3C4-BD2F7481C97F', '6074CAEA-7A8E-4699-9451-16C2EAF394EF',NULL),
(2, '82AB0C4B-9342-46FA-ACBE-C00B87571BF9','6074CAEA-7A8E-4699-9451-16C2EAF394EF',NULL)
我想要做的是过滤这些数据,currentEmpGuid
所以我声明变量来测试它:
DECLARE @CurrentEmpGuid UNIQUEIDENTIFIER = 'CC713AC9-ED79-47E3-BA37-47F2D5009BFC'
DECLARE @FilterEmpKey INT = NULL
SELECT * FROM Backchecks AS BC
WHERE [BC].[CompletedDate] IS NULL
AND (@FilterEmpKey IS NULL
OR [BC].[EmpGuid] = @CurrentEmpGuid)
所以正如你所看到的,它不应该返回任何结果,因为BC.EmpGuid
它不等于表中的任何结果,但由于某种原因我得到了结果。我究竟做错了什么?
BC.EmpGuid 不等于表中的任何结果,但由于某种原因我得到了结果。我究竟做错了什么?
WHERE [BC].[CompletedDate] IS NULL
这对于行和
(@FilterEmpKey IS NULL
OR [BC].[EmpGuid] = @CurrentEmpGuid)
由于@FilterEmpKey 为NULL,因此所有行也为TRUE。该[BC].[EmpGuid] = @CurrentEmpGuid
只如果设置@FilterEmpKey一些非空值进行评估。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句