Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Syntaxe incorrecte près de '(' lors de la vérification de la fragmentation de l'index

Votre base de données est probablement définie avec le niveau de compatibilité 80 (SQL Server 2000) et les fonctions DB_ID et OBJECT_ID ne peuvent pas être utilisées comme paramètre pour la fonction de gestion dynamique.

Vous devez soit modifier le niveau de compatibilité pour quelque chose de plus récent, soit utiliser des variables avant la requête :

USE StockSystem;
GO
DECLARE
    @database_id INT = DB_ID(),
    @object_id   INT = OBJECT_ID(N'dbo.StockItems');

SELECT a.index_id, name, avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (@database_id ,@object_id , NULL, NULL, NULL) AS a
JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id;