CREATE INDEX failed because the following SET options have incorrect settings: 'ARITHABORT'


Erreur :
CREATE INDEX failed because the following SET options have incorrect settings: 'ARITHABORT'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.
Cette erreur provient généralement d'une base de données SQL Server 2000 que l'on a migré vers une version plus récente. Pour ne plus avoir cette erreur, vérifier les valeurs des paramètres suivants :
  • Properties > Options > Compatibility level = SQL Server 2000 (80) ?
  • Properties > Options > Arithmetic Abort Enabled = False ?
Si ces deux paramètres ont ces valeurs, il faut mettre à jour votre base de données. Généralement, passer à un niveau de compatibilité "SQL Server 2008 (100)" suffit. Mais si ce n'est pas le cas, vous pouvez tester avec le second paramètre à "True".

Lire le niveau de compatibilité de la base courante


Petite astuce. Pour lire le niveau de compatibilité de la base courante :
SELECT COMPATIBILITY_LEVEL FROM sys.databases WHERE name = DB_NAME();
Pour rappel, cette option permet de définir certains comportements du moteur afin d'être compatible avec la version de SQL Server spécifiée. Les valeurs possibles sont :
  • 80 = SQL Server 2000
  • 90 = SQL Server 2005
  • 100 = SQL Server 2008 (ou 2008R2)
  • 110 = SQL Server 2012
  • 120 = SQL Server 2014
  • 130 = SQL Server 2016

ALTER DATABASE dynamique, sans connaître le nom de la base


Petite astuce, si vous souhaitez modifier la base courante sans préciser le nom. Sous SQL Server 2012 et plus récent, cela est très simple, il suffit de remplacer le nom de la base de données par CURRENT :
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 100;

Sous les versions antérieures à SQL Server 2012, c'est un peu plus compliqué. Il faut en effet passer par une requête dynamique :
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = 'ALTER DATABASE ' + QUOTENAME(DB_NAME()) + ' SET COMPATIBILITY_LEVEL = 100';
EXECUTE (@SQL);

SQL Server 2016 sous Linux


Information étonnante mais vraie : SQL Server arrive sous Linux. Pour avoir un aperçu c'est par là :
https://www.microsoft.com/fr-fr/server-cloud/sql-server-on-linux.aspx

1 2 ... 17