Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将数据类型numeric转换为int时出错_Sql Server_Database_Int_Type Conversion_Numeric - Fatal编程技术网

Sql server 将数据类型numeric转换为int时出错

Sql server 将数据类型numeric转换为int时出错,sql-server,database,int,type-conversion,numeric,Sql Server,Database,Int,Type Conversion,Numeric,我在同一台SQL Server上有两个数据库。相同的代码 我有一个带有输入参数@testint的存储过程。在一个数据库中,当我将一个数值值传递给该输入时,它会被截断,一切正常。在另一个例子中,当我做同样的事情时,我得到以下错误: 将数据类型numeric转换为int时出错 以下是存储过程签名: CREATE PROCEDURE [dbo].[blProductGetTariff] ( @CurrencyID INT, @ProductID

我在同一台SQL Server上有两个数据库。相同的代码

我有一个带有输入参数
@testint
的存储过程。在一个数据库中,当我将一个
数值
值传递给该输入时,它会被截断,一切正常。在另一个例子中,当我做同样的事情时,我得到以下错误:

将数据类型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
是数字,它在一个db中被精细地输入到
@TotalDays
中,但在第二个db中没有

可能的数据库设置是什么,是否有?或者我遗漏了什么,还有其他原因导致这种奇怪的行为


更新:Darin在下面的一条评论中提出了一个很好的观点:“另外,看看上面的代码,如果你传递的是一个数字(22,10),你可能会溢出整数。在这种情况下,你必须使数字变小或传递一个bigint。”。。他是对的。因此,将INT改为BIGINT解决了这个问题,尽管我仍然不明白为什么它不会发生在第一个数据库中,在第一个数据库中,INT可以正常工作,我使用完全相同的数据(实际上是相同的文件)进行测试

我认为您正在处理的是一个数据库范围内的NUMERIC_ROUNDABORT、arithabort或arithignore设置。您可以在此处阅读更多内容:

阿利希诺

阿里沙波特

数字循环中止

我认为在查询之前这样做会忽略您的错误。但从长远来看,这可能不是你想要做的。修复进程可能是最好的

SET NUMERIC_ROUNDABORT OFF

数据库很可能具有不同的数值_ROUNDABORT值。在SSMS中的数据库上单击鼠标右键,然后单击“属性”。转到“选项”,您将在“杂项”下找到此设置。

我认为您正在处理的是一个数据库范围内的NUMERIC\u ROUNDABORT、arithabort或arithignore设置。您可以在此处阅读更多内容:

阿利希诺

阿里沙波特

数字循环中止

我认为在查询之前这样做会忽略您的错误。但从长远来看,这可能不是你想要做的。修复进程可能是最好的

SET NUMERIC_ROUNDABORT OFF

数据库很可能具有不同的数值_ROUNDABORT值。在SSMS中的数据库上单击鼠标右键,然后单击“属性”。转到“选项”,您将在“杂项”下找到此设置。

请给出一些代码,这些代码在一个数据库中运行良好,但在另一个数据库中运行不正常。请检查两个数据库上的arithabort和arithignore是否相同(根据下面的Darin)。因此,兼容性级别是相同的。请给出一些在一个数据库中运行良好但在另一个数据库中运行不正常的代码。请检查两个数据库上的arithabort和arithignore是否相同(根据下面的Darin)。就这一点而言,兼容性水平是相同的。谢谢你的回复,达林。。但我不认为是这样,因为两个数据库都有相同的NUMERIC\u ROUNDABORT设置。请尝试将SET NUMERIC\u ROUNDABORT置于查询上方,看看是否失败。您是否尝试过在SSMS中运行类似的操作?你必须用@代替#。declare#numeric numeric(9,2),#int int set#numeric=50.23 set#int=#numeric select#int如果可以的话,您可以声明另一个变量并在将其传递到存储过程之前进行转换。此外,查看上面的代码,如果传递数值(22,10),则可能会溢出int。在这种情况下,你必须使数值变小或传递一个bigint。非常感谢你,Darin。我把INT改为BIGINT,所有的东西都开始在我以前遇到问题的数据库中工作。这很奇怪,因为我在两个数据库中使用了完全相同的数据进行测试,调试再次证明了这一点。这有什么原因吗?非常感谢你的帮助,非常感谢。谢谢你的回复,达林。。但我不认为是这样,因为两个数据库都有相同的NUMERIC\u ROUNDABORT设置。请尝试将SET NUMERIC\u ROUNDABORT置于查询上方,看看是否失败。您是否尝试过在SSMS中运行类似的操作?你必须用@代替#。declare#numeric numeric(9,2),#int int set#numeric=50.23 set#int=#numeric select#int如果可以的话,您可以声明另一个变量并在将其传递到存储过程之前进行转换。此外,查看上面的代码,如果传递数值(22,10),则可能会溢出int。在这种情况下,你必须使数值变小或传递一个bigint。非常感谢你,Darin。我把INT改为BIGINT,所有的东西都开始在我以前遇到问题的数据库中工作。这很奇怪,因为我在两个数据库中使用了完全相同的数据进行测试,调试再次证明了这一点。这有什么原因吗?非常感谢你的帮助,非常感谢。