存储过程不接受 null

问题描述 投票:0回答:1

我正在执行这个存储过程,它工作正常,但是当我从前端调用时,它不返回任何行。

ALTER PROCEDURE [dbo].[USP_GetRequest_DataListForViewPrint]
    @RequestNo VARCHAR(50) = null, 
    @FromDate varchar(50) = null,
    @ToDate varchar(50) = null
AS
BEGIN
    DECLARE @SQLStr varchar(8000), @WHERECRI VARCHAR(1000) = NULL

    IF (@RequestNo IS NOT NULL)
    BEGIN
        SET @WHERECRI = 'WHERE RequestNo='+ CHAR(39)+@RequestNo+ CHAR(39) ;
    END 
    ELSE  
    BEGIN
        SET @WHERECRI = ' WHERE RequestDate BETWEEN ' + CHAR(39) + CONVERT(varchar(10), CONVERT(datetime, @FromDate, 105), 102) + CHAR(39) + 'AND' + CHAR(39) + CONVERT(varchar(10), CONVERT(datetime, @ToDate, 105), 102)  + CHAR(39);
    END

    SET @SQLStr = 'SELECT Id, RequestStatus, RequestDate, RequestNo FROM CYGNUX_Request_Header ' + @WHERECRI;
    PRINT @SQLStr;

    EXEC(@SQLStr);
END

在前端它以这种方式获取参数,并且不返回任何数据:

EXEC  USP_GetRequest_DataListForViewPrint  '', '08-06-2020 00:00:00','16-06-2020 00:00:00'

但是如果我在 SQL Server 中以这种方式执行它,它就会返回数据。我不知道我的前端出了什么问题

EXEC  USP_GetRequest_DataListForViewPrint  null, '08-06-2020 00:00:00','16-06-2020 00:00:00'

请帮助我 - 我该如何解决这个问题?

sql sql-server stored-procedures asp.net-core-mvc
1个回答
0
投票

在前端,您没有传递 NULL 而是一个空字符串,因此您的 SP 正在执行 Select,其中 RequestNo 上的 WHERE 等于空字符串,可能不会返回任何记录。

© www.soinside.com 2019 - 2024. All rights reserved.