Sql 存储过程中用于搜索日期的条件不起作用

Sql 存储过程中用于搜索日期的条件不起作用,sql,sql-server,Sql,Sql Server,我创建了一个存储过程,它根据状态、船名和到期日期过滤许可证申请的记录。该代码已运行,用于过滤状态和船名(过期日期除外) 该函数应该使用ajax日历根据文本框上的输入过滤到期日期 我想我过滤有效期的条件有问题 有什么建议吗 USE [PhilfishPhilcatch] GO /****** Object: StoredProcedure [dbo].[rectesting] Script Date: 11/07/2013 08:53:48 ******/ SET ANSI_NULLS O

我创建了一个存储过程,它根据状态、船名和到期日期过滤许可证申请的记录。该代码已运行,用于过滤状态和船名(过期日期除外)

该函数应该使用ajax日历根据文本框上的输入过滤到期日期

我想我过滤有效期的条件有问题

有什么建议吗

USE [PhilfishPhilcatch]
GO
/****** Object:  StoredProcedure [dbo].[rectesting]    Script Date: 11/07/2013 08:53:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[rectesting]


@VesselName Varchar (30) = NULL,
@Status Varchar (10) = NULL,
@DateReleased date = NULL,
@ExpiryDate date = NULL,
@DateIssued date = NULL,
@Cfvgl_Upload varchar = NULL


AS
    BEGIN
        IF (@Status = 1)
            begin
            SELECT a.v_id, a.ship_name, b.status, b.cfvgl_validity_start , b.cfvgl_validity_end, b.cfvgl_path, b.cfvgl_date_released 
            FROM vessel_details as a INNER JOIN
            cfvgl as b ON a.v_id = b.v_id 
            WHERE
            a.ship_name LIKE ISNULL(@VesselName+'%', a.ship_name) AND
            (b.status = 4 OR b.status = 7)  
            end 

        IF (@Status <> NULL OR @Status <> '')
        begin
            SELECT a.v_id, a.ship_name, b.status, b.cfvgl_validity_start , b.cfvgl_validity_end, b.cfvgl_path, b.cfvgl_date_released 
            FROM vessel_details as a INNER JOIN
            cfvgl as b ON a.v_id = b.v_id 
            WHERE
            a.ship_name LIKE ISNULL(@VesselName+'%', a.ship_name) AND
            b.status = @Status  
            end

        IF (@ExpiryDate <> NULL OR @ExpiryDate <> '')
        begin   
            SELECT a.v_id, a.ship_name, b.status, b.cfvgl_validity_start , b.cfvgl_validity_end, b.cfvgl_path, b.cfvgl_date_released 
            FROM vessel_details as a INNER JOIN
            cfvgl as b ON a.v_id = b.v_id 
            WHERE
            b.cfvgl_validity_end = ISNULL (@ExpiryDate, b.cfvgl_validity_end)
        end
    END 

如果要检查值是否为NULL,则不能显式比较NULL。您需要将声明编写为:

IF (@EXPIRY_DATE IS NOT NULL OR ...)
建议:

IF ( NULLIF( @ExpiryDate, '' ) IS NOT NULL )
...

Null value cannot comparison with=>我的条件是检查到期日期是否为Null,它将搜索与文本框上的输入匹配的记录。。谢谢:
IF (@EXPIRY_DATE IS NOT NULL OR ...)
IF ( NULLIF( @ExpiryDate, '' ) IS NOT NULL )
...