2013-02-20 74 views
1

我在同一個SQL Server上有兩個數據庫。相同的代碼。將數據類型數值轉換爲int時出錯

我有一個輸入參數爲@Test INT的存儲過程。在一個數據庫中,當我將NUMERIC值傳遞給該輸入時,它會被截斷並且一切正常。在另外一個,做同樣的事情的時候,我得到以下錯誤:

Error converting data type numeric to 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,但不會在第二個分支中輸入。

什麼是可能的數據庫設置負責這個,是否有一個?或者我錯過了一些東西,這種奇怪的行爲還有其他原因嗎? 「Darron在他的一個評論中提出了一個非常好的觀點:」另外,看上面的代碼,如果你傳遞一個數字(22,10),你可能會溢出整數int。你必須使數字變小或通過bigint「..他是對的。因此,將INT更改爲BIGINT可以解決問題,但我仍然不明白爲什麼它不會在第一個數據庫中發生,因爲在INT中一切正常,我使用完全相同的數據(實際上是相同的文件)進行測試。

+1

請給出一些代碼在一個數據庫中正常工作,但不在其他數據庫中。 – 2013-02-20 17:08:49

+0

請檢查arithabort和arithignore在兩個數據庫中是否都是相同的(每個Darin都在下面)。就此而言,兼容性級別是相同的。 – 2013-02-20 18:01:44

回答

4

我想你正在處理NUMERIC_ROUNDABORT,arithabort或arithignore的數據庫範圍設置。你可以在這裏閱讀更多:

ARITHIGNORE http://msdn.microsoft.com/en-us/library/ms184341.aspx

ARITHABORT http://msdn.microsoft.com/en-us/library/ms190306.aspx

NUMERIC_ROUNDABORT http://msdn.microsoft.com/en-us/library/ms188791.aspx

我覺得這樣做之前,你的查詢會忽略你的錯誤。儘管如此,這可能不是你想要做的。修復proc可能是最好的。

SET NUMERIC_ROUNDABORT OFF 

數據庫最有可能具有不同的NUMERIC_ROUNDABORT值。右鍵單擊SSMS中的數據庫,然後單擊屬性。轉到選項,你會在雜項下找到這個設置。

+0

謝謝Darin的回覆.. 我不認爲這是它,因爲兩個數據庫都有相同的NUMERIC_ROUNDABORT設置。 – IgorShch 2013-02-20 17:44:46

+0

嘗試將SET NUMERIC_ROUNDABORT置於您的查詢之上並查看是否失敗。 – darin 2013-02-20 18:49:46

+0

不幸的是,不幸的是。但非常感謝您的幫助。 – IgorShch 2013-02-21 10:07:05

相關問題