1

あなたの助けが必要です:

Amount フィールドの SUM を取得したいのですが、10 進数の値が含まれていますが、そのINTEGER部分だけを取得し、それも必要ですDECIMAL

DECLARE @TOTAL AS DECIMAL(13,2)

SET @Total = (SELECT SUM(Amount)
              FROM t_DownPmtTrans
              WHERE MortgageID = @MortgageID 
                AND DatePaid IS NULL 
                AND SchedPayment IS NOT NULL)

CURSOR を試してみましたが、同じ結果が得られました。

OPEN dpt_cursor 
SET @Total= 0.0

FETCH NEXT FROM dpt_cursor INTO @DownPmtTransID, @Amount

WHILE @@FETCH_STATUS= 0 
BEGIN

   PRINT @Amount
   SET @Total = (@Total + @Amount)

   FETCH NEXT FROM dpt_cursor
     INTO @DownPmtTransID, @Amount
END 

RETURN  @Total* (-1)
CLOSE dpt_cursor 
DEALLOCATE dpt_cursor

ありがとう!!

4

3 に答える 3

2

MSDNによると、式が の場合decimalsumが返されdecimal(38, s)ます。データ型が is であることを確認してamountくださいdecimal。または、またはをdecimal使用して変換してみてください。このオプションが役立つ場合があります。castconvert

于 2013-04-08T18:34:21.057 に答える
2

サイズではなく精度とスケールを設定する必要があります http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.scale(v=vs.100).aspx

var outputParameter = new SqlParameter
{
    Direction = ParameterDirection.Output,
    ParameterName = "your parameter name in your stored procedure",
    SqlDbType = SqlDbType.Decimal,
    Precision = 13,
    Scale = 2
};

SQL パラメータの配列を宣言し、それにパラメータを追加します

var parameters = new SqlParameter[1];
parameters[0] = outputParameter

コマンド オブジェクトを宣言する

var command = new SqlCommand (); //don't forget everything else
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "stored procedure name"
command.Parameters.AddRange (parameters);

コマンドを実行します

command.ExecuteNonQuery ();

パラメータコレクションから値を読み取るようになりました

var value = (decimal) command.Parameters[0].Value;
于 2013-09-10T16:18:03.593 に答える