• Datetime strings are now in a format that should work regardless of SQL language/format setting. django-mssql issue #57
  • The default value for use_legacy_date_fields has changed to ‘False’. This setting will be removed in a later version. Once removed, any usage of the legacy ‘datetime’ datatype will require using the provided ‘Legacy*Field’ model fields.
  • SQL Server 2005 has not been tested in a while and support will officially be removed in the next release.
  • Decimals are passed through ADO as strings to avoid rounding to four places. django-mssql issue #55.
  • Database introspection will now identify an char type with a length over 8000 as a TextField. django-mssql issue #53
  • Minor changes to make it possible to subclass django-mssql for use on a non-Windows platform.


  • This version only supports Django v1.6. Use a previous version if you are using Django v1.5 or earlier.
  • Added BinaryField as varbinary(max)
  • Refactored DatabaseOperations.sql_flush to use a faster method of disabling/enabling constraints.
  • sqlserver_ado.fields.DateTimeField will now do a better job of returning an aware or naive datetime.
  • DateTime truncation will now support any datetime2 value without the potential of a datediff overflow exception.
  • Many improvements to regex_clr
    • Updated regex_clr to Visual Studio 2010
    • Patterns and fields with a length greater than 4000 will now work.
    • If pattern or input are NULL, it will not match instead of raising an exception.
    • regex_clr auto-installs during test database creation
    • Added command install_regex_clr to simplify enabling regex support for any database.
  • Database introspection will now identify a varchar(max) field as a TextField.
  • DatabaseIntrospection.get_indexes now properly finds regular, non-unique, non-primary indices.
  • Complete refactor of django-mssql test suite and abandoned tests that are covered by Django test suite.
  • Test database is dropped in a more forcible way to avoid “database in use” errors.


  • Support for Django v1.3 has been removed.
  • Corrected DB-API 2 testing documentation.
  • Fixed issue with slicing logic that could prevent the compiler from finding and mapping column aliases properly.
  • Improved the “return ID from insert” logic so it can properly extract the column data type from user defined fields with custom data type strings.
  • Fixed case for identifiers in introspection. Thanks Mikhail Denisenko.
  • Added option use_legacy_date_fields (defaults to True) to allow changing the DatabaseCreation.data_types to not use the Microsoft preferred date data types that were added with SQL Server 2008. django-mssql issue #31
  • Improved accuracy of field type guessing with inspectdb. See Introspecting custom fields
  • Fixed issue with identity insert using a cursor to the wrong database in a multi-database environment. Thanks Mikhail Denisenko
  • Fixed constraint checking. django-mssql issue #35 Thanks Mikhail Denisenko
  • Enabled can_introspect_autofield database feature. Django ticket #21097
  • Any date related field should now return from the database as the appropriate Python type, instead of always being a datetime.
  • Backend now supports doing date lookups using a string. E.g. Article.objects.filter(pub_date__startswith='2005')
  • check_constraints will now check all disabled and enabled constraints. This change was made to match the behavior tested by backends.FkConstraintsTests.test.test_check_constraints.
  • Improved date_interval_sql support for the various date/time related datatypes. The timedelta value will control whether the database will DATEADD using DAY or SECOND. Trying to add seconds to a date, or days to a time will generate database exceptions.
  • Fixed issue with provider detection that prevented DataTypeCompatibility=80 from being automatically added to the connection string for the native client providers.
  • Fixed SQL generation error that occured when ordering the query based upon a column that is not being returned.
  • Added savepoint support. MS SQL Server doesn’t support savepoint commits and will no-op it. Other databases, e.g. postgresql, mostly use it as a way of freeing server resources in the middle of a transaction. Thanks Martijn Pieters.
  • Minor cleanup of limit/offset SQL mangling to allow custom aggregates that require multiple column replacements. django-mssql issue #40 Thanks Martijn Pieters for initial patch and tests.
  • Savepoints cannot be used with MARS connections. django-mssql issue #41



  • Backend now supports returning the ID from an insert without needing an additional query. This is disabled for SQL Server 2000 (assuming that version still works with this backend). django-mssql issue #17
  • Subqueries will have their ordering removed because SQL Server only supports it when using TOP or FOR XML. This relies upon the with_col_aliases argument to SQLCompiler.as_sql only being True when the query is a subquery, which is currently the case for all usages in Django 1.5 master. django-mssql issue #18
  • UPDATE statements will now return the number of rows affected, instead of -1. django-mssql issue #19
  • Apply fix for Django ticket #12192. If QuerySet slicing would result in LIMIT 0, then it shouldn’t reach the database because there will be no response.
  • Implemented DatabaseOperation cache_key_culling_sql. Django ticket #18330
  • Fixed cast_avg_to_float so that it only controls the cast for AVG and not mapping other aggregates.
  • Improved IP address detection of HOST setting. django-mssql issue #21
  • Set database feature ignores_nulls_in_unique_constraints = False because MSSQL cannot ignore NULLs in unique constraints.
  • django-mssql issue #26 Documented clustered index issue with Azure SQL. See Azure requires clustered indices.


  • Ensure master connection connects to the correct database name when TEST_NAME is not defined.
  • Connection.close() will now reset adoConn to make sure it’s gone before the CoUninitialize.
  • Changed provider default from ‘SQLOLEDB’ to ‘SQLNCLI10’ with MARS enabled.
  • Added RawStoredProcedureManager, which provides raw_callproc that works the same as raw, except expects the name of a stored procedure that returns a result set that matches the model.
  • Documented known issue with database introspection with DEBUG = True and column names containing ‘%’. See Introspecting tables with ‘%’ columns.
  • Fixed error with iendswith string format operator.


  • Updated SQLInsertCompiler to work with Django 1.4
  • Added support for disable_constraint_checking, which is required for loaddata to work properly.
  • Implemented DatabaseOperations.date_interval_sql to allow using expressions like end__lte=F('start')+delta.
  • Fixed date part extraction for week_day.
  • DatabaseWrapper reports vendor as ‘microsoft’.
  • AVG function now matches core backend behaviors and will auto-cast to float, instead of maintaining datatype. Set database OPTIONS setting disable_avg_cast to turn off the auto-cast behavior.
  • StdDev and Variance aggregate functions are now supported and will map to the proper MSSQL named functions. Includes work around for Django ticket #18334.
  • Monkey patched django.db.backends.util.CursorWrapper to allow using cursors as ContextManagers in Python 2.7. Django ticket #17671.