我在同一个 SQL Server 上有两个数据库。相同的代码。
我有一个带有输入参数的存储过程@Test INT
。在一个数据库中,当我将一个NUMERIC
值传递给该输入时,它会被截断并且一切正常。另一方面,在做同样的事情时,我收到以下错误:
将数据类型 numeric 转换为 int 时出错
这是存储过程签名:
CREATE PROCEDURE [dbo].[blProductGetTariff]
(
@CurrencyID INT,
@ProductID INT,
@TradeDate DATETIME,
@TotalDays INT,
@onTariff NUMERIC(22, 10) OUTPUT
)
以下是我调用该存储过程的方式:
EXEC blProductGetTariff @CurrencyID,
@MTPLY_VolumeID,
@TradeDate,
@VolumeParam,
@VolumeMultiplierRate OUTPUT
@VolumeParam
是数字,它可以很好地输入到@TotalDays
一个分贝中,但不是在第二个分贝中。
对此负责的可能的数据库设置是什么,有吗?或者我遗漏了一些东西,这种奇怪的行为还有其他原因吗?
更新:达林在下面的评论中提出了一个很好的观点:“另外,看看你上面的代码,如果你传递一个数字(22,10),你可能会溢出 int。在这种情况下,你必须使数字更小或通过 bigint”.. 他是对的。因此将 INT 更改为 BIGINT 解决了问题,尽管我仍然不明白为什么它不会发生在第一个数据库中,在第一个数据库中一切正常,并且我使用完全相同的数据(实际上是相同的文件)进行测试。