带有布尔问题的SQL Server查询

带有布尔问题的SQL Server查询,sql,sql-server-2008,tsql,sql-server-2005,Sql,Sql Server 2008,Tsql,Sql Server 2005,还用IsEmployee=CONVERT(bit,@emporfreeloper) 和设置@emporFreeloer=CASE@emporFreeloer,当1然后0,否则0结束时 不管发生什么,它都会以相同的结果重新运行相同的列表 这不是很简单吗 IsEmployee列数据类型为(位,空) 我的开发SQL server是2008年。在线服务器是2005年,这应该是一个问题 比较空值将始终返回false。您已经声明IsEmployee可以为null,这可能是您的情况 SET ANSI_NULL

还用
IsEmployee=CONVERT(bit,@emporfreeloper)

设置@emporFreeloer=CASE@emporFreeloer,当1然后0,否则0结束时

不管发生什么,它都会以相同的结果重新运行相同的列表

这不是很简单吗

IsEmployee
列数据类型为
(位,空)


我的开发SQL server是2008年。在线服务器是2005年,这应该是一个问题

比较空值将始终返回false。您已经声明IsEmployee可以为null,这可能是您的情况

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

alter PROCEDURE [dbo].[TCCPAUsersAndNamesByJobPosition] @EmpOrfreeLance bit

AS
BEGIN
    SET NOCOUNT ON;

    SELECT distinct t1.UserId , tblCustomers.name 
    FROM tblTime t1
    inner join tblCustomers on t1.UserId=tblCustomers.custID
    where (t1.userid in (select distinct custID from tblCustomers where sectionCat Like '%,35%') )
    AND (t1.UserId in (select distinct custID from tblCustomers where IsEmployee = @EmpOrfreeLance))

end
尝试使用类似以下内容进行比较:

1 == NULL => False
0 == NULL => False
NULL == NULL => False


比较空值将始终返回false。您已经声明IsEmployee可以为null,这可能是您的情况

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

alter PROCEDURE [dbo].[TCCPAUsersAndNamesByJobPosition] @EmpOrfreeLance bit

AS
BEGIN
    SET NOCOUNT ON;

    SELECT distinct t1.UserId , tblCustomers.name 
    FROM tblTime t1
    inner join tblCustomers on t1.UserId=tblCustomers.custID
    where (t1.userid in (select distinct custID from tblCustomers where sectionCat Like '%,35%') )
    AND (t1.UserId in (select distinct custID from tblCustomers where IsEmployee = @EmpOrfreeLance))

end
尝试使用类似以下内容进行比较:

1 == NULL => False
0 == NULL => False
NULL == NULL => False


我可能遗漏了什么,但是为什么不这样写查询呢

ISNULL(IsEmployee, 0) = ISNULL(@EmpOrfreeLance, 0)

另外,当
IsEmployee
为空时,您还必须决定要做什么。(是否为员工)例如,通过使用
ISNULL(IsEmployee,CAST(0作为位))
来处理
NULL
值a
false
我可能遗漏了一些内容,但为什么不这样编写查询呢

ISNULL(IsEmployee, 0) = ISNULL(@EmpOrfreeLance, 0)

另外,当
IsEmployee
为空时,您还必须决定要做什么。(是否为员工)例如,通过使用
ISNULL(IsEmployee,CAST(0作为位))
来处理
NULL
值a
false
我错了,因为我错过了一件事

SELECT distinct t1.UserId, tblCustomers.name 
FROM tblTime t1
inner join tblCustomers on t1.UserId=tblCustomers.custID
where sectionCat Like '%,35%' AND 
      ISNULL(IsEmployee, CAST(0 As bit)) = @EmpOrfreeLance
我不想显示所有数据,也没有注意到在我发出的其他行上有一个OR


所以我也不得不把它加进去

我错了,因为我错过了一件事

SELECT distinct t1.UserId, tblCustomers.name 
FROM tblTime t1
inner join tblCustomers on t1.UserId=tblCustomers.custID
where sectionCat Like '%,35%' AND 
      ISNULL(IsEmployee, CAST(0 As bit)) = @EmpOrfreeLance
我不想显示所有数据,也没有注意到在我发出的其他行上有一个OR


因此,我也不得不将它添加到那里

您可以在中的
中删除select内部的
distinct
关键字,因为它不会起任何作用。@Magnus谢谢,完成,但我将把它保留在这里,以您的评论作为一个例子来说明一些没有效果的事情。您可以在
中的
中删除select内部的
distinct
关键字,因为它不会起任何作用。@Magnus谢谢,完成,但我将把它保留在这里,以您的评论作为一个例子,说明一些没有效果的事情。我应该注意到,SQL Server允许您通过数据库和/或查询上的ANSI_Nulls选项来控制它。这些实际上是什么,我完全忽略了它们:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
我应该注意到,SQL Server允许您通过数据库和/或查询上的ANSI_NULLS选项来控制这一点,我完全忽略了它们:
SET ANSI\u NULLS ON GO SET QUOTED\u IDENTIFIER ON GO
您可以使用:
…和isActive=1和isActiveAgent=1以及sivug,比如“%,35%”和(custType=1或custType=3或custType介于5和12之间)对其进行优化
您可以使用:
…和isActive=1、isActiveAgent=1以及SIBUG(如“%,35%”和(custType=1或custType=3或custType介于5和12之间)