v1.12.0rc3
Pre-release
Pre-release
dbt-sqlserver v1.12.0rc3
Together with @Benjamin-Knight and @joshmarkovic, we used the releases leading up to v1.11.0 to bring the adapter closer to current dbt-core versions while fixing several bugs along the way.
The v1.12.x release series formalizes that work and addresses the deprecations and behavior changes required to align the adapter with upcoming dbt-core v2.0 behavior (including support for the v2 parser). Please leave any feedback or insights on the GitHub Discussions page! #788
⚠️ Important Behavior Changes
Review these items before upgrading, as several default settings have changed:
pyodbcis no longer installed by default:
You must explicitly install and configure a backend. Usemssql-pythonfor standard setups or the experimental ADBC backend for future compatibility testing.dbt_sqlserver_use_dbt_transactionsdefaults toTrue:
dbt-managed transaction hooks now issue explicitBEGIN TRANSACTION/COMMIT TRANSACTIONstatements. Failed model executions roll back automatically instead of leaving partial state.- Legacy Option: Set to
Falseindbt_project.ymlto retain legacy autocommit behavior (Deprecated; will be removed in a future release).
- Legacy Option: Set to
dbt_sqlserver_use_native_string_typesdefaults toTrue:
String type mappings are now:STRING→VARCHAR(MAX)NCHAR→NCHAR(1)NVARCHAR→NVARCHAR(4000)- Legacy Option: Set to
Falseto preserve legacyVARCHAR(8000)andCHAR(1)mappings (Deprecated; will be removed in a future release).
dbt_sqlserver_use_default_schema_concatdefaults toTrue:
Custom schemas now concatenate withtarget.schema, matching dbt-core's defaultgenerate_schema_namemacro behavior.- Legacy Option: Set to
Falseto retain legacy behavior (Deprecated; will be removed in a future release). Alternatively, overridesqlserver__generate_schema_namefor custom schema handling (#800).
- Legacy Option: Set to
- Experimental ADBC backend available:
Configure withbackend: adbc. Requires installing thedbt-sqlserver[adbc]extra and the ADBC driver via thedbcCLI. Currently supports SQL Server username/password authentication (#771).
🛠️ Other Compatibility Changes
sql_headeris officially rejected: Usepre_hookorquery_optionsinstead.- Standardized identifier quoting: Adapter-generated identifiers now consistently use
adapter.quote(). Review custom macros or downstream packages expecting bracket-style SQL formatting ([schema].[table]). - Dependency requirements updated: Requires
dbt-core >= 1.12.0anddbt-adapters >= 1.24.5. - Python 3.14 support: Added to the build and testing matrix.
📋 Upgrade Checklist
Before deploying this release to production environments:
- Backend Selection: Choose and install
mssql-pythonoradbcif relying on implicitpyodbc. - Transactions: Verify projects/hooks aren't relying on implicit autocommit state.
- String Columns: Check downstream systems/views affected by
VARCHAR(MAX)orNVARCHAR(4000)type shifts. - Schemas: Confirm custom schema names align with core concatenation rules or override the schema macro.
- Custom SQL/Macros: Check for assumptions around SQL bracket quoting or
sql_header.
What's Changed
- feat: dbt-core 1.12 compatibility, Python 3.14 support, and transaction-safety fixes by @axellpadilla in #772
- Add workflow to sync main branch in preparation for default branch migration by @axellpadilla in #781
- Raise compiler error for sql_header config with redirect to pre_hooks/query_options by @axellpadilla in #777
- Add experimental ADBC backend by @axellpadilla in #783
- ci: run unit and integration tests on release branches by @axellpadilla in #797
- fix: concurrent-incremental catalog deadlock, and (nolock) on the remaining catalog lookups by @axellpadilla in #792
- fix: drop the model's outbound foreign keys too (#632) by @axellpadilla in #793
- fix: one identifier quoting style, and the unquoted identifiers underneath it (#785, #409) by @axellpadilla in #795
- Bump version to 1.12.0rc2 by @axellpadilla in #799
- fix: compare view body exactly instead of suffix-matching the whole definition by @Benjamin-Knight in #803
- feat: add
deniesconfig so object-level DENY survives a rebuild by @Benjamin-Knight in #802 - feat: apply data masks on the full_refresh_build=prebuilt path by @Benjamin-Knight in #804
- Fix/undrained probe cursor rollback by @Benjamin-Knight in #810
- chore: replace mypy with ty for type checking by @joshmarkovic in #784
- feat: default dbt_sqlserver_use_default_schema_concat to True by @axellpadilla in #811
- feat: add sqlserver__openquery macro and SQL Server best-practices guide by @axellpadilla in #790
- fix: quote openquery's server name via adapter.quote() instead of hand-formatted brackets by @axellpadilla in #816
Full Changelog: v1.11.1...v1.12.0rc3