{"record":{"id":"d51a775178e10f6f","repo":"apache/seatunnel","slug":"common-17-d51a77","errorCode":"COMMON-17","errorMessage":"'${identifier}' unsupported convert type '${dataType}' of '${field}' to SeaTunnel data type.","messagePattern":"'(.+?)' unsupported convert type '(.+?)' of '(.+?)' to SeaTunnel data type\\.","errorType":"error_code","errorClass":"SeaTunnelRuntimeException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/sqlserver/SqlServerTypeConverter.java","lineNumber":304,"sourceCode":"            case SQLSERVER_DATETIME2:\n                builder.sourceType(\n                        String.format(\"%s(%s)\", SQLSERVER_DATETIME2, typeDefine.getScale()));\n                builder.dataType(LocalTimeType.LOCAL_DATE_TIME_TYPE);\n                builder.scale(typeDefine.getScale());\n                break;\n            case SQLSERVER_DATETIMEOFFSET:\n                // DATETIMEOFFSET is LTZ (includes timezone offset)\n                builder.sourceType(\n                        String.format(\"%s(%s)\", SQLSERVER_DATETIMEOFFSET, typeDefine.getScale()));\n                builder.dataType(LocalTimeType.OFFSET_DATE_TIME_TYPE);\n                builder.scale(typeDefine.getScale());\n                break;\n            case SQLSERVER_SMALLDATETIME:\n                builder.sourceType(SQLSERVER_SMALLDATETIME);\n                builder.dataType(LocalTimeType.LOCAL_DATE_TIME_TYPE);\n                break;\n            default:\n                throw CommonError.convertToSeaTunnelTypeError(\n                        DatabaseIdentifier.SQLSERVER, sqlServerType, typeDefine.getName());\n        }\n        return builder.build();\n    }\n\n    @Override\n    public BasicTypeDefine reconvert(Column column) {\n        BasicTypeDefine.BasicTypeDefineBuilder builder =\n                BasicTypeDefine.builder()\n                        .name(column.getName())\n                        .nullable(column.isNullable())\n                        .comment(column.getComment())\n                        .defaultValue(column.getDefaultValue());\n        switch (column.getDataType().getSqlType()) {\n            case BOOLEAN:\n                builder.columnType(SQLSERVER_BIT);\n                builder.dataType(SQLSERVER_BIT);\n                break;","sourceCodeStart":286,"sourceCodeEnd":322,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/sqlserver/SqlServerTypeConverter.java#L286-L322","documentation":"SqlServerTypeConverter.convert() maps a SQL Server column type string to a SeaTunnel data type when reading. Type strings with no case in the switch (unmapped SQL Server types) hit default and throw CommonError.convertToSeaTunnelTypeError. The source cannot represent that column in the SeaTunnel type system.","triggerScenarios":"Reading a SQL Server table containing a column type not handled by the converter, e.g. HIERARCHYID, GEOGRAPHY, GEOMETRY, SQL_VARIANT, SYSNAME, or TABLE type in the metadata.","commonSituations":"Legacy SQL Server schemas using spatial or hierarchyid columns; sql_variant columns populated via generic CDC or catalog metadata reads; type names changed across SQL Server versions.","solutions":["Cast the column in the source query, e.g. SELECT CAST(geo AS NVARCHAR(MAX)) AS geo FROM t.","Create a view excluding/casting unsupported columns and read from it.","Select only supported columns in the connector's query.","Add a converter case for the type (e.g. map GEOGRAPHY to STRING) if appropriate, and contribute upstream."],"exampleFix":"// before: SELECT * FROM places (has GEOGRAPHY col)\n// after\nSELECT id, CONVERT(NVARCHAR(MAX), geo) AS geo_str FROM places","handlingStrategy":"validation","validationCode":"-- Find unsupported SQL Server columns before reading\nSELECT COLUMN_NAME, DATA_TYPE\nFROM INFORMATION_SCHEMA.COLUMNS\nWHERE TABLE_NAME = 'MyTable'\n  AND DATA_TYPE IN ('hierarchyid','geography','geometry','sql_variant','sysname','table','timestamp');","typeGuard":null,"tryCatchPattern":"try {\n    sourceReader.read();\n} catch (SeaTunnelRuntimeException e) {\n    if (e.getMessage().contains(\"unsupported convert type\")) {\n        // rewrite query with CONVERT(NVARCHAR(MAX), col) for the named column\n    } else { throw e; }\n}","preventionTips":["Avoid spatial/hierarchyid/sql_variant columns in tables used as SeaTunnel sources.","Expose ETL-friendly views with CAST/CONVERT for legacy tables.","Check INFORMATION_SCHEMA.COLUMNS during pipeline onboarding.","Use explicit column lists instead of SELECT *."],"tags":["jdbc","sqlserver","type-conversion","source","unsupported-type"],"backgroundTag":"unsupported-dtype","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}