Sql-Server
在預期條件的上下文中指定的非布爾類型的表達式,靠近“與”
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