Sql-Server

在預期條件的上下文中指定的非布爾類型的表達式,靠近“與”

  • June 9, 2021
ALTER PROCEDURE [dbo].[usp_BaseScan_CycleCount_Report]
@StartDate varchar(10),
@EndDate varchar(10)

AS

BEGIN

   IF @StartDate AND @EndDate IS NOT NULL
       SELECT * 
       FROM dbo.CycleCountHistory
       WHERE RecordDate BETWEEN @StartDate AND @EndDate
       
   ELSE 
       SELECT *
       FROM dbo.CycleCountHistory
END

錯誤消息:消息 4145,級別 15,狀態 1,過程 usp_BaseScan_CycleCount_Report,第 16 行 在預期條件的上下文中指定的非布爾類型表達式,靠近“與”。消息 156,級別 15,狀態 1,過程 usp_BaseScan_CycleCount_Report,第 21 行關鍵字“ELSE”附近的語法不正確。

問題出在這一行:

IF @StartDate AND @EndDate IS NOT NULL

您期望這被評估為:

IF (@StartDate AND @EndDate) IS NOT NULL

但 SQL Server 評估它的方式是:

IF (@StartDate) AND (@EndDate IS NOT NULL)

所以錯誤是@StartDate不是布爾表達式,不能用作IF表達式的一部分。

相反,您需要執行以下操作:

IF @StartDate IS NOT NULL AND @EndDate IS NOT NULL

引用自:https://dba.stackexchange.com/questions/293956