none
ローカル変数にパラメータを代入する所で算術オーバーフローします RRS feed

  • 質問

  • お世話になります.下記プロシージャを実行するとタイトルのエラーが発生して困っています.エラーの起きている行はローカル変数@CutOffにパラメータ@Startを代入する行のところです.データ型をFLOATに変更するなどしてみましたが改善しません.よろしくお願いします.

    『expression をデータ型 float に変換中に、算術オーバーフロー エラーが発生しました。』

    なお,次の行で呼び出しているsp_OtherProcedureは単独で実行して異常がないことは確認済みです.

    CREATE PROCEDURE [dbo].[sp_Procedure] 
    	(	@Start	decimal(5, 2)
    	,	@End	decimal(5, 2)
    	,	@Step	decimal(5, 2)
    	)
    AS
    BEGIN
    	SET NOCOUNT ON;
    	CREATE TABLE	#Result	
    	(	[CutOff]	decimal(5, 2)		NOT NULL
    	,	a		int				NOT NULL
    	,	b		int				NOT NULL
    	,	c		int				NOT NULL
    	,	d		int				NOT NULL
    	,	N		int				NOT NULL
    	,	[a+b]	int				NOT NULL
    	,	[c+d]		int				NOT NULL
    	,	[a+c]		int				NOT NULL
    	,	[b+d]	int				NOT NULL
    	)
    	DECLARE	@CutOff	decimal(5, 2)
    	SET @CutOff = @Start
    	WHILE @CutOff <= @End 
    	BEGIN
    		INSERT INTO #Result EXEC sp_OtherProcedure @CutOff
    		SET @CutOff = @CutOff + @Step
    	END;
    

    2013年3月2日 6:47

回答

  • 計算結果は計算元の型に合わせられますから、そこでオーバーフローを起こしているのではないかと思われます。なお、0で除算した場合は、「0 除算エラーが発生しました。」というエラーメッセージが表示されるはずですので、0での除算が原因ではないと思います。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 佐伯玲 2013年3月4日 7:38
    • 回答としてマーク じふ 2013年3月7日 0:54
    2013年3月4日 1:46

すべての返信

  • エラーメッセージから推測するに、エラーが発生しているのは単なる代入のところではなく、何らかの計算を行っているところだと思われます。一度、INSERT INTO文をコメントアウトして試してみて下さい。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年3月2日 8:18
  • お世話になります.確かにご指摘通り,INSERT INTO文をコメントアウトするとエラーは発生しなくなりました.

    sp_OtherProcedureでは一時テーブルの属性を使用して除算を行なっていますが,直接パラメータに代入した結果を見ても0での除算はありませんでした.

    CONVERT(decimal(5, 3), [a]/[a+c])

    といったような式です.

    2013年3月2日 12:46
  • 計算結果は計算元の型に合わせられますから、そこでオーバーフローを起こしているのではないかと思われます。なお、0で除算した場合は、「0 除算エラーが発生しました。」というエラーメッセージが表示されるはずですので、0での除算が原因ではないと思います。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 佐伯玲 2013年3月4日 7:38
    • 回答としてマーク じふ 2013年3月7日 0:54
    2013年3月4日 1:46
  • お世話になります.属性を代入する順番が間違っていました.

    解決しました.ありがとうございました.

    2013年3月7日 0:54