> 백엔드 개발 > 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)을 사용하도록 쿼리를 수정하세요. 이렇게 하면 레코드를 찾을 수 없는 경우 결과가 비어 있지 않고 기본적으로 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:

    null 값을 지정된 값으로 바꾸려면 COALESCE 함수를 사용하세요. 이 예에서는 ISNULL(ch.Amount, 0) 또는 COALESCE(ch.Amount, 0)을 사용하여 null 값을 확인하고 SQL 문에서 해당 값을 0으로 바꿀 수 있습니다.

    <code class="language-sql">SELECT ISNULL(SUM(Amount), 0) AS CreditsSum
    FROM CreditHistory
    WHERE UserID = @userID;</code>
    로그인 후 복사

    그런 다음 C#에서 직접 결과를 받습니다.

이러한 기술을 적용하면 쿼리에서 null 값을 효율적으로 처리하고 "값 유형으로 변환할 수 없습니다" 오류를 방지할 수 있습니다. 선택하는 방법은 선호도와 데이터베이스 시스템에 따라 다릅니다. 방법 2와 3은 데이터베이스 측에서 null 값을 보다 직접적으로 처리하는 반면, 방법 1은 C# 측에서 이를 처리합니다.

위 내용은 '값 유형 'Int32'로의 변환 실패' 오류를 방지하기 위해 SQL SUM()에서 Null 값을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿