web-dev-qa-db-fra.com

Implications du changement du mode de compatibilité dans SQL Server de 100 à 110

J'ai une base de données Mydatabase créée dans SQL Server 2008 R2. J'ai mis à niveau vers SQL Server 2012.

J'essayais d'exécuter la requête ci-dessous pour calculer le centile

select Distinct [KEY],PERCENTILE_CONT(0.25)  within group(order by EachPrice)
OVER(Partition By [KEY]) As Q1,PERCENTILE_CONT(0.50)  within group(order by EachPrice)
OVER(Partition By [KEY]) As Q2,
PERCENTILE_CONT(0.75)  within group(order by EachPrice)
OVER(Partition By [KEY]) As Q3,
PERCENTILE_CONT(1)  within group(order by EachPrice)
OVER(Partition By [KEY]) As Q4
from Mydatabase

mais je reçois une erreur indiquant que

Msg 10762, niveau 15, état 1, ligne 1
La fonction PERCENTILE_CONT n'est pas autorisée dans le mode de compatibilité actuel. Il n'est autorisé qu'en mode 110 ou supérieur.

  1. Puis-je changer le mode de compatibilité en 110?
  2. Quelles sont les implications du changement du mode de compatibilité de 100 à 110?

Veuillez conseiller

17
Shiva

Jetez un œil au lien suivant:

Niveau de compatibilité ALTER DATABASE

Faites défiler vers le bas et vous verrez la section "Différences entre les niveaux de compatibilité inférieurs et le niveau 110" et identifiez si l'un de ces éléments vous affectera ou non. Sinon, changez simplement le niveau à 110.

9
steoleary

Il existe également pgrade Advisor qui vous aidera à identifier tout élément de votre base de données qui pourrait causer des problèmes lors de la modification du niveau de compatibilité (essentiellement une manière semi-automatisée de faire ce que @steoleary a suggéré, ce qui réduit les chances de vous manquez rien).

5
Steve Pettifer

Microsoft Data Migration Assistant vous aide à trouver rapidement et facilement tout problème pouvant empêcher ou compliquer une mise à niveau.

S'il ne détecte aucun problème (ou s'il le fait, et que vous y avez résolu), vous pouvez simplement mettre à niveau en exécutant ces commandes, une à la fois:

USE master
go
ALTER DATABASE [yourdatabasesname]  SET SINGLE_USER     WITH ROLLBACK IMMEDIATE
go
ALTER DATABASE [yourdatabasesname]  SET COMPATIBILITY_LEVEL = 110    -- 130=SQL Server 2016, 120=2014, 110=2012
go
ALTER DATABASE [yourdatabasesname]  SET MULTI_USER
go
5
MGOwen