【问题标题】:SQL Server error: An expression of non-boolean type specified in a context where a condition is expected, near ')'SQL Server 错误:在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'
【发布时间】:2020-06-10 19:19:10
【问题描述】:

我正在尝试根据给定的输入和表的计数创建一个唯一的 ID。 但是,我得到了所需的输出,但是在程序中使用它时会返回错误说明

SQL Server - 在上下文中指定的非布尔类型的表达式 预期条件的位置,靠近 ')'

这是我的代码

ALTER PROCEDURE [dbo].[GetpaymentCode]
(
@O_SupplierCode     varchar(50) output,
@O_ErrorDesc        varchar(100)output
)
AS
BEGIN
    declare     @Error      int
    declare     @Count      char(10)
    declare     @Qry        nvarchar(4000)
    declare     @QryCondition   nvarchar(1000)


DECLARE @Financial_Year VARCHAR(20)
DECLARE @Year VARCHAR(4)
DECLARE @TotalMax VARCHAR(10)
DECLARE @YearMax VARCHAR(10)
DECLARE @TotalCnt INT
DECLARE @YearCnt INT
DECLARE @BillPrefix VARCHAR(5)
DECLARE @BillId VARCHAR(20)
SET @Financial_Year = @O_SupplierCode

SET @BillPrefix = 'P'+SUBSTRING(@Financial_Year,8,2)

PRINT @BillPrefix
TRUNCATE TABLE Tbl_Max
DECLARE @Query NVARCHAR(MAX)
SET @Query = N'WITH T0 AS
(
SELECT MAX(Payment_Id) TotalMax FROM payment_master WHERE Payment_Id 
)
, T1 AS
(
SELECT MAX(Payment_Id) YearMax FROM payment_master WHERE Payment_id LIKE ''' + @BillPrefix + '%''
)
INSERT INTO Tbl_Max
SELECT * FROM T0 INNER JOIN T1 ON 1 = 1'

PRINT @Query

EXEC sp_executesql  @Query

SELECT @TotalMax = ISNULL(TotalMax,'0'), @YearMax = ISNULL(YearMax,'0') FROM Tbl_Max

IF(@TotalMax != '0')
BEGIN
       SET @TotalCnt = CONVERT(INT, SUBSTRING(@TotalMax,6,3)) + 1
END
ELSE
BEGIN  
       SET @TotalCnt = 1
END

IF(@YearMax != '0')
BEGIN
       SET @YearCnt = CONVERT(INT, SUBSTRING(@YearMax,4,2)) + 1
END
ELSE
BEGIN  
       SET @YearCnt = 1
END


--PRINT @TotalCnt
--PRINT @YearCnt

SET @BillId = @BillPrefix + replace(str(@YearCnt,2),' ','0') + replace(str(@TotalCnt,3),' ','0')

SELECT @BIllId AS BILL_CODE
end

【问题讨论】:

  • SELECT MAX(Payment_Id) TotalMax FROM payment_master WHERE Payment_Id 无效。
  • 谢谢。当数据库中没有值时,我正在测试。更正后它工作正常。

标签: sql sql-server


【解决方案1】:

在 T0 部分的 CTE 命令中,你写了不完整的 where 条件。

SELECT MAX(Payment_Id) TotalMax FROM payment_master WHERE Payment_Id =?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多