我有两个几乎相同的记录。一个包含“请求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 + '%'过滤器就会被忽略。

10-08 05:31