Maison > développement back-end > C++ > Comment gérer les valeurs nulles dans SQL SUM() pour éviter l'erreur « Échec de la conversion en valeur 'Int32' » ?

Comment gérer les valeurs nulles dans SQL SUM() pour éviter l'erreur « Échec de la conversion en valeur 'Int32' » ?

DDD
Libérer: 2025-01-10 20:36:42
original
278 Les gens l'ont consulté

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

Exception SQL : 'Impossible de convertir en type de valeur 'Int32''

Dans votre requête SQL, vous essayez de calculer la somme de la colonne CreditHistory de la table Amount pour un utilisateur spécifique. Cependant, lorsqu'il n'y a aucun enregistrement pour cet utilisateur dans la table CreditHistory, vous obtenez l'erreur : "Impossible de convertir en type de valeur 'Int32' car la valeur matérialisée est nulle". En effet, SQL SUM() renvoie une valeur nullable lorsque les données sous-jacentes contiennent des valeurs nulles, alors que C# attend un type int non nullable dans votre résultat.

Pour gérer les valeurs nulles dans les requêtes et éviter cette erreur, vous pouvez utiliser plusieurs techniques :

  1. Utiliser DefaultIfEmpty :

    Modifiez votre requête pour utiliser Sum() avant d'appliquer DefaultIfEmpty(0). Cela garantit que si un enregistrement n'est pas trouvé, le résultat par défaut est zéro plutôt que vide :

    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();
    Copier après la connexion
  2. Utiliser des types de données nullables :

    Changez le type de la colonne CreditHistory dans la table Amount en un type nullable, tel que int?. Cela permet à votre requête de renvoyer des valeurs nulles :

    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
    Copier après la connexion
  3. Utiliser COALESCE :

    Utilisez la fonction COALESCE pour remplacer les valeurs nulles par des valeurs spécifiées. Dans cet exemple, vous pouvez utiliser ISNULL(ch.Amount, 0) ou COALESCE(ch.Amount, 0) pour rechercher les valeurs nulles et les remplacer par des zéros dans l'instruction SQL :

    SELECT ISNULL(SUM(Amount), 0) AS CreditsSum
    FROM CreditHistory
    WHERE UserID = @userID;
    Copier après la connexion

    Recevez ensuite le résultat directement en C#.

En appliquant ces techniques, vous pouvez gérer efficacement les valeurs nulles dans les requêtes et éviter les erreurs « Impossible de convertir en type de valeur ». La méthode que vous choisissez dépend de vos préférences et de votre système de base de données. Les méthodes 2 et 3 gèrent les valeurs nulles plus directement du côté de la base de données, tandis que la méthode 1 les gère du côté C#.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal