Tsql 当有2个预期结果时,SQL WHERE子句仅返回其中一个结果
我在存储过程中有一个Where子句,它只返回Where子句中2个可能返回中的一个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
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把它作为答案,我会接受的。