{"record":{"id":"df734b7f1d8b3bb3","repo":"risingwavelabs/risingwave","slug":"data-type-name-is-not-supported-in-sql-server","errorCode":null,"errorMessage":"{data_type_name} is not supported in SQL Server","messagePattern":"(.+?) is not supported in SQL Server","errorType":"validation","errorClass":"SinkError::SqlServer","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/sqlserver.rs","lineNumber":904,"sourceCode":"                    query.bind(None as Option<Vec<u8>>);\n                }\n                DataType::Interval => return Err(data_type_not_supported(\"Interval\")),\n                DataType::Struct(_) => return Err(data_type_not_supported(\"Struct\")),\n                DataType::List(_) => return Err(data_type_not_supported(\"List\")),\n                DataType::Jsonb => return Err(data_type_not_supported(\"Jsonb\")),\n                DataType::Variant => return Err(data_type_not_supported(\"Variant\")),\n                DataType::Serial => return Err(data_type_not_supported(\"Serial\")),\n                DataType::Int256 => return Err(data_type_not_supported(\"Int256\")),\n                DataType::Map(_) => return Err(data_type_not_supported(\"Map\")),\n                DataType::Vector(_) => return Err(data_type_not_supported(\"Vector\")),\n            },\n        };\n    }\n    Ok(())\n}\n\nfn data_type_not_supported(data_type_name: &str) -> SinkError {\n    SinkError::SqlServer(anyhow!(format!(\n        \"{data_type_name} is not supported in SQL Server\"\n    )))\n}\n\nfn unexpected_downstream_timestamptz_type(sql_server_data_type: &str) -> SinkError {\n    SinkError::SqlServer(anyhow!(format!(\n        \"unexpected downstream SQL Server type {sql_server_data_type} for Timestamptz\"\n    )))\n}\n\nfn check_data_type_compatibility(data_type: &DataType) -> Result<()> {\n    match data_type {\n        DataType::Boolean\n        | DataType::Int16\n        | DataType::Int32\n        | DataType::Int64\n        | DataType::Float32\n        | DataType::Float64","sourceCodeStart":886,"sourceCodeEnd":922,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/sqlserver.rs#L886-L922","documentation":"This helper constructs a `SinkError::SqlServer` for RisingWave data types that have no SQL Server equivalent in the sink's parameter binding/compatibility checks. `check_data_type_compatibility` (at sink creation) and `bind_params` (at runtime) call it when they encounter an unsupported `DataType`. The sink deliberately refuses unsupported types rather than corrupting data.","triggerScenarios":"Creating a SQL Server sink whose source table/materialized view contains a data type rejected by `check_data_type_compatibility` (e.g. Struct, List, Bytea, Interval, or similar complex types), or binding a row value of such a type during `bind_params`.","commonSituations":"Sinking a materialized view with nested struct/array columns to SQL Server; ingestion pipelines introduced a new RW type after the sink was set up; users expecting automatic JSON serialization of complex types.","solutions":["Flatten or drop unsupported columns in the materialized view before sinking (e.g. cast structs to JSON strings if supported, or exclude the column).","Cast unsupported types to supported SQL Server-compatible types in the sink's schema (e.g. `CAST(col AS VARCHAR)`).","Check the function's match list in src/connector/src/sink/sqlserver.rs to see exactly which RW types are supported.","If the type should be supported, file/track an upstream feature request; upgrading RisingWave may add support."],"exampleFix":"// before: sinking a struct column directly\nCREATE SINK s FROM mv WITH (connector='sqlserver', ...); // mv has col struct<a INT>\n// after: cast to string in mv\nCREATE MATERIALIZED VIEW mv2 AS SELECT col::VARCHAR AS col_str FROM mv;\nCREATE SINK s FROM mv2 WITH (connector='sqlserver', ...);","handlingStrategy":"validation","validationCode":"// Rust: reject unsupported types before creating the sink\nfn has_unsupported_type(cols: &[Column]) -> bool {\n    cols.iter().any(|c| matches!(c.data_type(),\n        DataType::Struct(_) | DataType::List(_) | DataType::Bytea | DataType::Interval))\n}","typeGuard":"fn is_supported(dt: &DataType) -> bool {\n    !matches!(dt, DataType::Struct(_) | DataType::List(_) | DataType::Bytea | DataType::Interval)\n}","tryCatchPattern":"if let Err(e) = create_sink(cfg).await {\n    if e.to_string().contains(\"is not supported in SQL Server\") {\n        flatten_or_cast_offending_columns();\n    } else { return Err(e); }\n}","preventionTips":["Review RW data types for nested/complex columns before choosing a SQL Server sink","Cast structs/lists to VARCHAR upstream","Keep sink schemas limited to scalar types"],"tags":["sqlserver","sink","data-type","unsupported-type"],"backgroundTag":"unsupported-dtype","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}