Tsql 当有2个预期结果时,SQL WHERE子句仅返回其中一个结果

Tsql 当有2个预期结果时,SQL WHERE子句仅返回其中一个结果,tsql,stored-procedures,Tsql,Stored Procedures,我在存储过程中有一个Where子句,它只返回Where子句中2个可能返回中的一个 GO /****** Object: StoredProcedure [dbo].[RPT_HC_ShiftRates] Script Date: 01/23/2018 10:51:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER Procedure [dbo].[RPT_HC_ShiftRates] AS --varia

我在存储过程中有一个Where子句,它只返回Where子句中2个可能返回中的一个

GO
/****** Object:  StoredProcedure [dbo].[RPT_HC_ShiftRates]    Script Date: 01/23/2018 10:51:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure  [dbo].[RPT_HC_ShiftRates]

AS --variables
BEGIN
select c.Company
, c.OurReference
, Shifts1 as [Split shifts]
, Shifts2 as [Invoiced at one rate]
, s.PortalApproval
, s.Rates
, s.Breaks
, c.ClientID


from ClientSectorDefinedColumns s
join clients c on c.ClientID = s.ClientID
left OUTER JOIN ClientBranches AS CB ON C.ClientID = CB.BranchClientId

where (Shifts1 = 'y' or Shifts2 = 'y' or s.Rates is not null or s.Breaks is not null)
and (c.OurReference like 'P00%' or c.OurReference = 'HEA%')  
and C.ClientID in (select objectid from SectorObjects where SectorId in (58, 59, 60, 61, 62, 63, 64, 65, 66, 47 ))

END
我怀疑引起问题的线路是:

and (c.OurReference like 'P00%' or c.OurReference = 'HEA%')
这只是像“P00%”一样返回,而它应该返回一个或另一个

我是SQL新手,只完成了20761B,在我的培训材料中几乎没有找到答案


谢谢你的帮助

显然你有做模式匹配的意图。 在条件的第一部分中,您使用了正确的方法:

c.OurReference like 'P00%'
但是在第二部分中,您意外地使用了
=
而不是像这样的

c.OurReference = 'HEA%'
这样的错误很容易被忽视。 条件的右侧确实包含百分号(
%
), 但如果没有类似于
,SQL Server不会将其解释为通配符。
相反,字符是“按原样”匹配的。
只有当列
OurReference
实际上是
HEA%
时,该条件才会成功。
在您的数据库中,情况从来不是这样;没有任何记录将与该条件的该部分匹配。

c.OurReference='HEA%'
-考虑到上下文,该
=
不应该是类似的
吗?那会有帮助吗?绝对是那个。非常感谢@RuudHelderman把它作为答案,我会接受的。