不幸的是,我有兩個表來比較兩個表之間的浮點數據類型。我已經閱讀了試着轉換,轉換,使用一個小的差異,並嘗試所有。存儲過程中的SQL Server浮點數比較
奇怪的部分是,這隻有當我執行存儲過程時失敗。如果我將存儲過程的主體剪切並粘貼到SSMS窗口中,它的工作原理非常棒。
樣品SQL:
set @newEnvRiskLevel = -1
select
@newEnvRiskLevel = rl.RiskLevelId
from
LookupTypes lt
inner join
RiskLevels rl on lt.LookupTypeId = rl.RiskLevelTypeFk
where
lt.Code = 'RISK_LEVEL_ENVIRONMENTAL'
and convert(numeric(1, 0), rl.RiskFactor) = @newEnvScore
set @errorCode = @@ERROR
if (@newEnvRiskLevel = -1 or @errorCode != 0)
begin
print 'newEnvScore = ' + cast(@newEnvScore as varchar) + ' and risk level = ' + cast(isnull(@newEnvRiskLevel, -1) as varchar)
print 'ERROR finding environmental risk level for code ' + @itemCode + ', skipping record'
set @recordsErrored = @recordsErrored + 1
goto NEXTREC
end
我@newEnvScore
變量也是一個float
轉化爲numeric(1, 0)
。我已經驗證RiskFactor列中的值只有0,1,2和3,並且(通過調試)@newEnvScore
的值爲2.我還驗證了我的查詢有一行代碼= 「RISK_LEVEL_ENVIRONMENTAL」和RiskFactor = 2
我已經通過調試,失敗是由於@newEnvRiskLevel住在-1驗證和@errorCode爲0
我也試着投以十進制和int,轉換爲int,以及「rl.RiskFactor - @newEnvScore < 1」在我的where子句中,其中沒有一個設置newEnvRiskLevel。
正如我所說的,它是只有當運行此存儲過程失敗發生,這是我真的不明白的部分。我期望SQL Server是確定性的,無論SQL是運行存儲過程的主體,還是在SSMS選項卡中運行完全相同的SQL。
那麼有什麼不工作?你有錯誤嗎?它不會返回正確的信息嗎? –
提供表格的上下文也會有幫助。是的,我知道你告訴我們什麼是價值觀,但是現在打敗一些有形的數據來粘貼你的遊戲。 –
另外,我在執行諸如convert(numeric(1,0),rl.RiskFactor)= @newEnvScore等演員時發現了問題。你有沒有試過convert(numeric(1,0),rl.RiskFactor)= Convert(numeric(1,0),@ newEnvScore)?冗餘也許當鑄造時會發生奇怪的事情... –