8114: Error converting data type X to Y
SQL Server의미
타입이 호환되지 않아 값을 한 데이터 타입에서 다른 타입으로 변환할 수 없었다. 오류 245와 달리 보통 파라미터/표현식 수준의 타입 변환 실패다(예: varchar에서 numeric으로).
원인
숫자가 아니거나 형식이 잘못된 텍스트를 숫자 컬럼/파라미터에 보냈거나, scale/precision 오버플로, 빈 문자열('')을 numeric으로 변환 시도, 파라미터화된 쿼리에 잘못된 타입의 인수 전달이 원인이다. ORM이 생성하는 암묵적 변환에서 흔하다.
해결 방법
변환되는 값이 대상 타입에 맞는지 확인한다. 안전한 변환에는 TRY_CONVERT / TRY_CAST를 사용한다. 실패 시 NULL을 반환하므로 WHERE로 해당 행을 걸러낼 수 있다. 파라미터 타입을 컬럼 타입과 일치시킨다. ISNUMERIC/TRY_CAST로 데이터를 스캔해 문제 행을 찾고 빈 문자열을 정리한다.
같은 데이터베이스의 다른 항목
- 40544The database has reached its size quota (Azure SQL) (데이터베이스 크기 할당량 도달)
- 40613Database is not currently available (Azure SQL) (데이터베이스를 현재 사용할 수 없음)
- 102Incorrect syntax near 'token'
- 1204The instance of the SQL Server Database Engine cannot obtain a LOCK resource (SQL Server Database Engine 인스턴스가 LOCK 리소스를 확보할 수 없음)
- 3906Failed to update database because the database is read-only (데이터베이스가 읽기 전용이어서 갱신 실패)
- 15023User already exists in the current database (현재 데이터베이스에 사용자가 이미 존재)
- 18452Login failed. The login is from an untrusted domain and cannot be used with Windows authentication (로그인 실패. 신뢰할 수 없는 도메인의 로그인은 Windows 인증에 사용할 수 없음)