![](/img/trans.png)
[英]SQL Server 2012 Error converting data type varchar to numeric
[英]Error converting data type varchar to numeric in sql server
我为 Save InvoicePayment 创建了一个存储过程。 当我尝试执行存储过程时,出现以下错误:
消息 8114,级别 16,状态 5,过程 USP_SaveInvoicePayment_LKO,第 0 行 [批处理起始行 118] 将数据类型 varchar 转换为数字时出错。
ALTER PROC Usp_saveinvoicepayment_lko @RECEIPTNO VARCHAR(500),
@INVOICEID BIGINT,
@PayableAmount NUMERIC(10, 2),
@RECEIPTDT DATE,
@PAYMENTMODE VARCHAR(50),
@TRANREF VARCHAR(500),
@USERID BIGINT,
@CHEQUEDATE DATE,
@isValid INT,
@remark VARCHAR(100),
@InvoiceNo VARCHAR(50),
@PaymentRecieved VARCHAR(20),
@PreviousBalance NUMERIC(10, 2),
@ChequeNumber VARCHAR(20),
@PaymentMonth VARCHAR(20),
@PaymentDate DATE,
@CollectorMobile INT,
@Latitude NUMERIC(10, 2),
@Longitude NUMERIC(10, 2),
@RESPONSECODE INT output,
@RESPONSEMESSAGE VARCHAR(255) output,
@IDRESPONSE VARCHAR(200) output
AS
SET nocount ON
BEGIN
--declare @PRJCD varchar(10),
--@KML GEOMETRY ,
--@rowcount int
BEGIN try
--SELECT @PRJCD=PRJCD FROM PRJMST WHERE ID=@PRJID
IF @RECEIPTNO IS NULL
BEGIN
DECLARE @id_out TABLE
(
id VARCHAR(200)
)
--set @ENTRYDATE=getdate()
-- select
convert(varchar,isnull(max(convert(numeric,substring(receiptno,21,50)))+1,1))
from invoicepayment where invoiceid=@invoiceid
INSERT INTO invoicepayment_lko
(receiptno,
invoiceid,
payableamount,
receiptdt,
paymentmode,
trnreference,
userid,
entrydate,
chequedate,
isvalid,
remark,
invoiceno,
paymentrecieved,
previousbalance,
chequenumber,
paymentmonth,
paymentdate,
collectormobile,
latitude,
longitude)
output inserted.receiptno
INTO @id_out
VALUES ( @INVOICENO + '/REC/'
+ (SELECT CONVERT(VARCHAR, Isnull(
Max(CONVERT(NUMERIC, Substring(
receiptno, 21,
50
)))
+ 1, 1))
FROM invoicepayment_lko
WHERE invoiceid = @invoiceid),
@INVOICEID,
@PayableAmount,
@RECEIPTDT,
@PAYMENTMODE,
@TRANREF,
@USERID,
Getdate(),
@CHEQUEDATE,
@isValid,
@remark,
@InvoiceNo,
@PaymentRecieved,
@PreviousBalance,
@ChequeNumber,
@PaymentMonth,
@PaymentDate,
@CollectorMobile,
@Latitude,
@Longitude)
SELECT @IDRESPONSE = id
FROM @id_out
SELECT Ident_current(id)
FROM invoicepayment_lko
UPDATE invoicedetails
SET balanceamt = balanceamt - @PayableAmount
WHERE id = @INVOICEID
END
ELSE
BEGIN
UPDATE invoicepayment_lko
SET chequedate = @CHEQUEDATE,
invoiceid = @INVOICEID,
payableamount = @PayableAmount,
receiptdt = @RECEIPTDT,
paymentmode = @PAYMENTMODE,
trnreference = @TRANREF,
userid = @USERID,
updatedt = Getdate(),
isvalid = @isValid,
remark = @remark,
invoiceno = @InvoiceNo,
paymentrecieved = @PaymentRecieved,
previousbalance = @PreviousBalance,
chequenumber = @ChequeNumber,
paymentmonth = @PaymentMonth,
paymentdate = @PaymentDate,
collectormobile = @CollectorMobile,
latitude = @Latitude,
longitude = @Longitude
WHERE receiptno = @RECEIPTNO
SET @IDRESPONSE = @RECEIPTNO
END
DECLARE @totalPayment NUMERIC(10, 2)
SELECT @totalPayment = Sum(payableamount)
FROM invoicepayment_lko
WHERE invoiceid = @invoiceid
AND isvalid = 1
SELECT @totalPayment,
@invoiceid
END try
BEGIN catch
SELECT @RESPONSECODE = Error_number(),
@RESPONSEMESSAGE = Error_message();
--set @RESPONSEMESSAGE= @prjid;
SELECT @RESPONSECODE,
@RESPONSEMESSAGE
END catch
IF @RESPONSECODE IS NULL
BEGIN
IF @isValid = 0
BEGIN
SET @RESPONSEMESSAGE = 'Payment marked as Invalid'
END
ELSE
BEGIN
SET @RESPONSEMESSAGE = 'Payment created/Updated
Successfully'
END
SET @RESPONSECODE = 200
END
END
--Execution
DECLARE @RESPONSECODE INT = 20,
@RESPONSEMESSAGE VARCHAR(255) = 'Payment Created',
@IDRESPONSE VARCHAR(200) = 'No Response'
EXEC Usp_saveinvoicepayment_lko
NULL,
123,
'87.09',
'2019-07-11',
'Debit',
'test',
12,
'2019-08-11',
1,
'test',
'LP/0819/0000183',
'yES',
'90.09',
'9875',
'7',
'2019-07-18',
988893739,
'28.09',
'76.09',
@RESPONSECODE out,
@RESPONSEMESSAGE out,
@IDRESPONSE out
请再次检查您的输入。 根据过程中传递的参数
EXEC Usp_saveinvoicepayment_lko
NULL,
123,
'87.09',
'2019-07-11',
'Debit',
'test',
12,
'2019-08-11',
1,
'test',
'LP/0819/0000183',
'yES',
'90.09',
'9875',
'7',
'2019-07-18',
988893739, --- this is one of the reason for your error as you took this as int, but this value will definitly not convert into int.
'28.09',
'76.09',
@RESPONSECODE out,
@RESPONSEMESSAGE out,
@IDRESPONSE out
如果您可以看到电话号码被视为int
并且 int 不是您的字段手机号码的正确数据类型,请使用 BigInt 或使用 varchar
我对手机号码字段的建议。
@CollectorMobile BIGINT or VARCHAR(15)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.