gpt4 book ai didi

sql-server - 如何捕获错误消息 "Error Converting data type varchar to decimal"

转载 作者:行者123 更新时间:2023-12-04 06:35:57 25 4
gpt4 key购买 nike

我有一个使用 try catch 块执行更新的存储过程。列 (discountPercentage) 设置为十进制数据类型。我希望存储过程能够捕获用户是否将折扣百分比作为小数以外的任何内容插入,例如,如果他们尝试插入 45%。我正在使用 ERROR_MESSAGE 函数,但由于某种原因它没有捕捉到错误消息。我仍然收到错误消息,指出“将数据类型 varchar 转换为十进制时出错”。到目前为止,这是我的代码:

alter procedure procUpdateFoodTitleConditionDiscount
(
@foodTitleId int,
@conditionId int,
@discountPercentage decimal(4,2),
@errorMessage varchar(100) output
)
as
begin
set @errorMessage = 'Discount updated'

begin try
update Discount
set discountPercentage = @discountPercentage
where foodTitleId = @foodTitleId and conditionId = @conditionId

if (@@ROWCOUNT = 0)
begin
set @errorMessage = 'Update not successful.'
end
end try

begin catch
if (ERROR_MESSAGE () like '%converting%')
begin
set @errorMessage = 'Please Insert Discount Percentage as a Decimal (ex 0.45)'
end
end catch

end;

declare @errorMessageValue varchar (100)
execute procUpdateFoodTitleConditionDiscount
@foodTitleId = '104',
@conditionId = '4',
@discountPercentage = '45%',
@errorMessage = @errorMessageValue output
print @errorMessageValue

最佳答案

假设你尝试这样的事情
Exec procUpdateFoodTitleConditionDiscount 1,1,'45%'
您的程序签名阻止了任何 proc 被执行。

例如,如果您添加

begin
PRINT 'foo'

set @errorMessage = 'Discount updated'

'foo' 永远不会被打印。

如果你想要你所描述的行为,你需要改变 @discountPercentage decimal(4,2),@discountPercentage varchar(10)

关于sql-server - 如何捕获错误消息 "Error Converting data type varchar to decimal",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4876145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com