Jon*_*han -1 sql t-sql sql-server
我有这样一张桌子:
+-------------+--------------------------------------+--------------------------------------+---------------+
| 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 |
+-------------+--------------------------------------+--------------------------------------+---------------+
Run Code Online (Sandbox Code Playgroud)
查询创建:
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)
Run Code Online (Sandbox Code Playgroud)
我想要做的是根据这个过滤这些数据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)
Run Code Online (Sandbox Code Playgroud)
所以你可以看到它不应该返回任何结果,因为BC.EmpGuid它不等于表中的任何结果,但由于某种原因我得到了结果.我究竟做错了什么?
BC.EmpGuid不等于表中的任何结果,但由于某种原因我得到了结果.我究竟做错了什么?
WHERE [BC].[CompletedDate] IS NULL
Run Code Online (Sandbox Code Playgroud)
这两行都是正确的
(@FilterEmpKey IS NULL
OR [BC].[EmpGuid] = @CurrentEmpGuid)
Run Code Online (Sandbox Code Playgroud)
因为@FilterEmpKey为NULL,所有行也为TRUE.[BC].[EmpGuid] = @CurrentEmpGuid如果将@FilterEmpKey设置为某个非空值,则只需要进行评估.
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |