ホームページ > バックエンド開発 > C++ > 「値型 'Int32' へのキャストが失敗しました」エラーを回避するために SQL SUM() で Null 値を処理する方法

「値型 'Int32' へのキャストが失敗しました」エラーを回避するために SQL SUM() で Null 値を処理する方法

DDD
リリース: 2025-01-10 20:36:42
オリジナル
196 人が閲覧しました

How to Handle Null Values in SQL SUM() to Avoid

SQL 例外: '値の型 'Int32' に変換できません

SQL クエリで、特定のユーザーの CreditHistory テーブル内の Amount 列の合計を計算しようとしています。ただし、CreditHistory テーブルにそのユーザーのレコードがない場合は、「実体化された値が null であるため、値の型 'Int32' に変換できません」というエラーが発生します。これは、基になるデータに null 値が含まれる場合、SQL SUM() は null 許容値を返すのに対し、C# は結果に null 非許容の int 型を期待するためです。

クエリで null 値を処理し、このエラーを防ぐには、いくつかの手法を使用できます。

  1. DefaultIfEmpty を使用します:

    Sum()を適用する前に、DefaultIfEmpty(0)を使用するようにクエリを変更します。これにより、レコードが見つからない場合、結果は空ではなくデフォルトでゼロになります:

    <code class="language-csharp">var creditsSum = (from u in context.User
                      join ch in context.CreditHistory on u.ID equals ch.UserID
                      where u.ID == userID
                      select ch.Amount).DefaultIfEmpty(0).Sum();</code>
    ログイン後にコピー
  2. null 許容データ型を使用します:

    CreditHistory テーブルの Amount 列の型を、int? などの null 許容型に変更します。これにより、クエリで null 値を返すことができます:

    <code class="language-csharp">var creditsSum = (from u in context.User
                      join ch in context.CreditHistory on u.ID equals ch.UserID
                      where u.ID == userID
                      select ch.Amount).Sum(); // Sum() will now handle nulls correctly
    ```  或者更简洁的写法:
    
    ```csharp
    var creditsSum = (from u in context.User
                      join ch in context.CreditHistory on u.ID equals ch.UserID
                      where u.ID == userID
                      select ch.Amount).Sum() ?? 0; // 使用null-coalescing operator</code>
    ログイン後にコピー
  3. COALESCE を使用します:

    COALESCE 関数を使用して、null 値を指定した値に置き換えます。この例では、ISNULL(ch.Amount, 0) または COALESCE(ch.Amount, 0) を使用して SQL ステートメント内で null 値をチェックし、それらをゼロに置き換えることができます。

    <code class="language-sql">SELECT ISNULL(SUM(Amount), 0) AS CreditsSum
    FROM CreditHistory
    WHERE UserID = @userID;</code>
    ログイン後にコピー
    次に、結果を C# で直接受け取ります。

これらの手法を適用すると、クエリで null 値を効率的に処理し、「値の型に変換できません」エラーを回避できます。 どの方法を選択するかは、好みとデータベース システムによって異なります。 方法 2 と 3 はデータベース側で null 値を直接処理しますが、方法 1 は C# 側で null 値を処理します。

以上が「値型 'Int32' へのキャストが失敗しました」エラーを回避するために SQL SUM() で Null 値を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート