SQL Server DBCC errors 8907 or 8908 i indexed views

Oopps! Upgrade your browser pretty please. Oopps! Upgrade your browser pretty please.

Med DBCC CHECDB och DBCC CHECKTABLE kan du hitta logiska och fysiska felaktigheter i databasintegriteten och om DBCC returnerar felkod 8907 eller 8908 så indikerar det att den indexerade vyn inte ger samma resultat som den beräknade vyn. I såna fall så kan du kontrollera resultatet genom att ställa frågan mot den indexerade vyn och mot vyn med ”OPTION(EXPAND VIEWS)” för att se skillnaderna.

SELECT * FROM ViewName OPTION(EXPAND VIEWS) — Get calculated view.
SELECT * FROM ViewName WITH(NOEXPAND)       — Get stored view.

Om resultatet är stort så kan det vara svårt att se några differenser men genom att lägga in EXCEPT i mellan dessa två så får du ut differenserna (kom ihåg att kontrollera åt båda hållen).

SELECT * FROM ViewName OPTION(EXPAND VIEWS) — Get calculated view.
EXCEPT
SELECT * FROM ViewName WITH(NOEXPAND)       — Get stored view.

Vs

SELECT * FROM ViewName WITH(NOEXPAND)       — Get stored view.
EXCEPT
SELECT * FROM ViewName OPTION(EXPAND VIEWS) — Get calculated view. 

Anledning till differensen kan bero på att man aggregerar over float eller real datatyperna som då ger felaktig avrundning.

Om du behöver hjälp med att felsöka DBCC så hjälper våra SQL server konsulter gärna till.

/Håkan Winhter