SQL script to set database compatability level

To set the database compatability level of a database using a t-sql commmand you will use the ALTER DATABASE command.

---------------------------------------
ALTER DATABASE [database_name] SET COMPATIBILITY_LEVEL = 90 | 100 | 110
---------------------------------------

SQL Server 2000 = compatability level 80
SQL Server 2005 = compatability level 90
SQL Server 2008 = compatability level 100
SQL Server 2012 = compatability level 110

Here is a quick and dirty script to set the compatability level of all the databases on the server:

---------------------------------------
declare @dbname varchar(128), @sql varchar(max), @level varchar(3);
set @level = '110' --- 90 | 100 | 110
declare cursor1 cursor for 
select rtrim(name) from sys.databases 
   where databasepropertyex(name, 'Status') = 'ONLINE' 
   and name not in ('master', 'model', 'tempdb', 'msdb', 'distribution');

open cursor1;
fetch next from cursor1 into @dbname;

while @@fetch_status = 0
begin
   set @sql = 'ALTER DATABASE ' + quotename(@dbname) + ' SET COMPATIBILITY_LEVEL = ' + @level + ';';
   exec(@sql);

   fetch next from cursor1 into @dbname;
end
close cursor1;
deallocate cursor1;
---------------------------------------

One thought on “SQL script to set database compatability level

  1. Here is a quick way without a CURSOR and sets it to what version is installed for the instance .
    SELECT ‘ALTER DATABASE ‘ + quotename(name) + ‘ SET COMPATIBILITY_LEVEL = ‘ + (SELECT CAST(compatibility_level AS CHAR(3)) FROM sys.databases WHERE name = ‘model’) + ‘;’
    FROM sys.databases
    WHERE compatibility_level (SELECT compatibility_level FROM sys.databases WHERE name = ‘model’)

Leave a comment