2016-11-07 6 views
2

このコードが0.34を出力した理由は分かりません(私は0.335を期待しました)。 TSQLカーソルは金額タイプの変数を自動的に切り上げますか? これについて知ってもらってください。TSQL Cursorは自動的にマネータイプ変数を切り上げます

DECLARE @Rate MONEY; 

DECLARE csrRate 
CURSOR FOR 
    SELECT 0.335 

OPEN csrRate; 
FETCH NEXT FROM 
    csrRate 
INTO 
    @Rate 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     PRINT @Rate 

     FETCH NEXT FROM csrRate INTO @Rate 
    END 
CLOSE csrRate 
DEALLOCATE csrRate 
+3

伝統的に、お金は小数点以下2桁です!また、MONEYデータ型を使用しないでください! –

+0

'DECLARE csrRate CURSOR for SELECT CAST( '0.335' AS MONEY);を試してください。 –

+1

@MitchWheat SQL Serverの 'MONEY'データ型は4桁を格納します。 SSMSでは、最大4桁の*表示も可能です。 –

答えて

3

PRINTを使用すると、これが既定の動作です。 moneyをにキャストしました。そしてdefaultは次のとおりです。だから、

enter image description here

、あなたはこのようにそれをキャストすることができます:

DECLARE @Rate MONEY; 

DECLARE csrRate 
CURSOR FOR 
    SELECT $0.335 

OPEN csrRate; 
FETCH NEXT FROM 
    csrRate 
INTO 
    @Rate 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 

     PRINT @Rate 
     PRINT convert(varchar(30), @Rate, 2) 
     --SELECT @RATE 


     FETCH NEXT FROM csrRate INTO @Rate 
    END 
CLOSE csrRate 
DEALLOCATE csrRate 

また、あなたがSELECTに値をしようとした場合、それは文字列にキャストされていません。

+0

デバッグに 'PRINT'を使うのは非常に危険です。私はキャストしたり、代わりに 'SELECT'を使います。 – pstakashi

関連する問題