我有两个几乎相同的记录。一个包含“请求ID”的空值,另一个不包含。我想过滤出该列没有空值的数据,但我也希望根据关键字过滤掉数据。
搜索ProjectName可以得到所需的信息,但是搜索Originator仍然可以给我两个结果?
这是我到目前为止的内容:
USE [ResourceRequest]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[search_project_bykeyword]
(@ProjectName varchar(100)=NULL
,@Originator varchar(100)=NULL)
AS
SELECT *
FROM [dbo].[Resource_Request]
WHERE [Request ID] IS NOT NULL
AND
[Project Name] LIKE @ProjectName + '%'
OR [Originator] LIKE @Originator + '%'
最佳答案
只需在这部分加上括号,就可以了:
(
[Project Name] LIKE @ProjectName + '%'
OR [Originator] LIKE @Originator + '%'
)
出现问题的原因是
OR
使您的过滤器对于与Originator
过滤器匹配的任何行都是正确的,而与其他过滤器无关,因此只要[Request ID] IS NOT NULL
,[Originator] LIKE @Originator + '%'
过滤器就会被忽略。