【发布时间】: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