【发布时间】:2013-02-05 19:08:45
【问题描述】:
我在同一个 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,但在第二个分贝中却没有。
对此负责的可能的数据库设置是什么,有吗?或者我遗漏了什么,这种奇怪的行为还有其他原因?
更新:Darin 在下面的一个 cmets 中提出了一个很好的观点:“另外,看看你上面的代码,如果你传递一个 numeric(22,10),你可能会溢出 int ). 在这种情况下,您必须使数字更小或传递 bigint".. 他是对的。因此将 INT 更改为 BIGINT 解决了问题,尽管我仍然不明白为什么它不会发生在第一个数据库中,在第一个数据库中一切正常,并且我使用完全相同的数据(实际上是相同的文件)进行测试。
【问题讨论】:
-
请提供一些在一个数据库中运行良好但在另一个数据库中运行良好的代码。
-
请检查两个数据库上的 arithabort 和 arithignore 是否相同(根据下面的 Darin)。就此而言,兼容性级别是相同的。
标签: sql-server database int type-conversion numeric