복붙노트

[SQL] 예외 : SQLException : 문자열 또는 이진 데이터는 잘립니다

SQL

예외 : SQLException : 문자열 또는 이진 데이터는 잘립니다

나는 일괄 INSERT 문을 많이 수행하는 C # 코드가 있습니다. 이 문을 실행하는 동안, 나는 오류 및 거래 roledback "문자열 또는 이진 데이터가 잘립니다"있어요.

이 원인이되는 삽입 문을 확인하려면, 나는 오류를 명중 할 때까지의 SQLServer에서 하나 하나를 삽입해야합니다.

이는 문과하는 필드 예외 처리를 사용하여이 문제의 원인을 찾을 수있는 영리한 방법이 있나요? (SQL 예외)

해결법

  1. ==============================

    1.일반적으로 오류가 발생한 특정하는 문 확인할 수있는 방법이 없습니다. 여러 실행하는 경우, 당신은 마지막으로 완성 된 문장에서 프로파일과 모습을 볼 수 있으며, 그 방법은 당신을 위해 가능한 경우에 나는 아무 생각이 없지만, 그 후 문이 될 일을 참조하십시오.

    일반적으로 오류가 발생한 특정하는 문 확인할 수있는 방법이 없습니다. 여러 실행하는 경우, 당신은 마지막으로 완성 된 문장에서 프로파일과 모습을 볼 수 있으며, 그 방법은 당신을 위해 가능한 경우에 나는 아무 생각이 없지만, 그 후 문이 될 일을 참조하십시오.

    어떠한 경우에도, 귀하의 매개 변수 (그리고 내부의 데이터) 중 하나는에 데이터를 저장하려고 분야에 비해 너무 큽니다. 꽤 빨리 분명해야 문제의 열 크기와 분야 (들)에 대한 귀하의 매개 변수의 크기를 확인합니다.

  2. ==============================

    2.은 SQL 서버 열의 데이터 유형이 적은 입력 폼에 입력 된 데이터의 길이보다 긴 길이를 갖는 경우에 이러한 종류의 오류가 발생한다.

    은 SQL 서버 열의 데이터 유형이 적은 입력 폼에 입력 된 데이터의 길이보다 긴 길이를 갖는 경우에 이러한 종류의 오류가 발생한다.

  3. ==============================

    3.당신이 넣어 자 이상 당신이이 경우에 같은 데이터베이스 테이블에 지정했는지에 비해 값이있을 때이 유형의 오류는 일반적으로 발생합니다 지정  transaction_status의 VARCHAR (10)  하지만 당신은 실제로 가게에 노력 _transaction_status 이는 19 개 문자가 포함되어 있습니다. 당신이 코드에서 이러한 유형의 오류에 직면 이유

    당신이 넣어 자 이상 당신이이 경우에 같은 데이터베이스 테이블에 지정했는지에 비해 값이있을 때이 유형의 오류는 일반적으로 발생합니다 지정  transaction_status의 VARCHAR (10)  하지만 당신은 실제로 가게에 노력 _transaction_status 이는 19 개 문자가 포함되어 있습니다. 당신이 코드에서 이러한 유형의 오류에 직면 이유

  4. ==============================

    4.

    BEGIN TRY
        INSERT INTO YourTable (col1, col2) VALUES (@val1, @val2)
    END TRY
    BEGIN CATCH
        --print or insert into error log or return param or etc...
        PRINT '@val1='+ISNULL(CONVERT(varchar,@val1),'')
        PRINT '@val2='+ISNULL(CONVERT(varchar,@val2),'')
    END CATCH
    
  5. ==============================

    5.그것은 당신이 삽입 된 전화를 만드는 방법에 따라 달라집니다. 모든 일 전화로, 또는 트랜잭션 내의 개별 통화로? 개별 호출하면, 예 (당신이 호출을 통해 반복으로, 실패를 잡을). 하나의 큰 호출하면 더.하지 SQL 전체 문을 처리하고, 그래서 코드의 손에서입니다.

    그것은 당신이 삽입 된 전화를 만드는 방법에 따라 달라집니다. 모든 일 전화로, 또는 트랜잭션 내의 개별 통화로? 개별 호출하면, 예 (당신이 호출을 통해 반복으로, 실패를 잡을). 하나의 큰 호출하면 더.하지 SQL 전체 문을 처리하고, 그래서 코드의 손에서입니다.

  6. ==============================

    6.당신은 같은 결과가 발생해야한다

    당신은 같은 결과가 발생해야한다

    SELECT
     Col1, Col2, ..., [ColN]
    INTO [MyTempTable]
    FROM
      [Tables etc.]
    WHERE 0 = 1
    

    이것은 당신이 그들이 다른 곳을보고 두 테이블에 열을 비교할 수 있습니다 목표 테이블 구조 즉 비교할 수있는 당신의 DB에 MyTempTable라는 테이블을 생성합니다. 그것은 해결의 조금이지만 내가 찾은 가장 빠른 방법입니다.

  7. ==============================

    7.일반적으로 당신이 허용되는 최대 값보다 큰 값을 삽입하는 것입니다. 예는, 데이터 열은 200 자까지 보유 할 수 있지만, (201) - 문자열을 삽입하는

    일반적으로 당신이 허용되는 최대 값보다 큰 값을 삽입하는 것입니다. 예는, 데이터 열은 200 자까지 보유 할 수 있지만, (201) - 문자열을 삽입하는

  8. ==============================

    8.Linq를 함께하려면 SQL 나는 예를 들어, 컨텍스트를 로그인하여 디버깅. Context.Log =있는 console.out 그런 명백한 오류를 확인하기 위해 SQL 스캔, 두 가지가 있었다 :

    Linq를 함께하려면 SQL 나는 예를 들어, 컨텍스트를 로그인하여 디버깅. Context.Log =있는 console.out 그런 명백한 오류를 확인하기 위해 SQL 스캔, 두 가지가 있었다 :

    -- @p46: Input Char (Size = -1; Prec = 0; Scale = 0) [some long text value1]
    -- @p8: Input Char (Size = -1; Prec = 0; Scale = 0) [some long text value2]
    

    내가 값에 대해 테이블 ​​스키마를 검색하여 볼 수있는 마지막 하나는, 필드는 NVARCHAR (20)했지만 값은 22 개 문자였다

    - @ P41 : 입력 NVARCHAR (크기 = 4000; PREC = 0; 배율 = 0) [1234567890123456789012]

  9. ==============================

    9.데이터베이스에 널 값 다시 넣어 위해 노력하고 있기 때문에 그것은 또한 수 있습니다. 거래 중 하나는 그들에 널 (null)을 가질 수 있도록.

    데이터베이스에 널 값 다시 넣어 위해 노력하고 있기 때문에 그것은 또한 수 있습니다. 거래 중 하나는 그들에 널 (null)을 가질 수 있도록.

  10. ==============================

    10.우리의 경우에는 내가 덜 프런트 엔드에서 게시 된 총 문자보다되는 SQL 테이블에 허용되는 문자 또는 필드 크기를 늘리십시오. 따라서 문제를 해결할 수있다.

    우리의 경우에는 내가 덜 프런트 엔드에서 게시 된 총 문자보다되는 SQL 테이블에 허용되는 문자 또는 필드 크기를 늘리십시오. 따라서 문제를 해결할 수있다.

  11. ==============================

    11.여기에 대한 답변의 대부분은 데이터베이스에 정의 된 컬럼의 길이는 당신이 그것으로 통과하려고하는 데이터보다 작은 것으로, 명백한 확인을 할 수 있습니다.

    여기에 대한 답변의 대부분은 데이터베이스에 정의 된 컬럼의 길이는 당신이 그것으로 통과하려고하는 데이터보다 작은 것으로, 명백한 확인을 할 수 있습니다.

    여러 번 나는 빠른을하고, SQL 관리 스튜디오로 이동하여 물린 :

    sp_help 'mytable'
    

    나는 문제의 열이 길이 정말 더블 바이트 (유니 코드) 데이터 형식이기 때문에 실제 길이가 지원 두 배로됩니다 sp_help는이보고 의미 NVARCHAR, 실감 때까지 몇 분 동안 혼동.

    sp_help는이 NVARCHAR 길이 (40)를보고하는 경우 즉, 당신은 20 자 최대 저장할 수 있습니다.

  12. ==============================

    12.간단하게이를 사용 :   MessageBox.Show (cmd4.CommandText.ToString ()); C # .NET이 당신에게 주 조회가 표시됩니다, 그것을 복사하고 데이터베이스에서 실행됩니다.

    간단하게이를 사용 :   MessageBox.Show (cmd4.CommandText.ToString ()); C # .NET이 당신에게 주 조회가 표시됩니다, 그것을 복사하고 데이터베이스에서 실행됩니다.

  13. from https://stackoverflow.com/questions/779082/sqlexception-string-or-binary-data-would-be-truncated by cc-by-sa and MIT license