8662: Der gruppierte Index "%1!" kann nicht für die "%2!"-Sicht erstellt werden
Fehlermeldung:
Meldung 8662, Ebene 16, Status 0, Zeile 2
Der gruppierte Index "%1!" kann nicht für die "%2!"-Sicht erstellt werden, da die Sicht auf einen unbekannten Wert verweist (SUM-Aggregat eines Ausdrucks, der NULL zulässt). Verweisen Sie in SUM nur auf Werte, die keine NULL-Werte zulassen. Dabei kann ISNULL() hilfreich sein.
Ebene:
16.
Beschreibung:
Diese Fehlermeldung erscheint, wenn man versucht eine Sicht zu indizieren, die NULL Marker innerhalb des SUM Ausdruckes zulässt.
Auswirkungen:
Das SQL Statement kann zwar geparst werden, jedoch zur Laufzeit wird der Fehler ausgelöst.
Behebung:
Fehler der Ebene 16 sind Fehler, die vom Anwender hervorgerufen werden. Sie können und müssen vom Anwender korrigiert werden. Das Statement kann so nicht ausgeführt werden. Der SUM() Ausdruck muss modifiziert werden. Falls NULL Marker nicht ausgeschlossen werden können, sollte man versuchen per ISNULL() NULL durch andere ergebnisneutrale Werte zu ersetzen.
Versionen:
Alle Versionen von SQL Server.
Beispiele:
USE Northwind;
GO
SET NUMERIC_ROUNDABORT OFF;
SET ANSI_PADDING,
ANSI_WARNINGS,
CONCAT_NULL_YIELDS_NULL,
ARITHABORT,
QUOTED_IDENTIFIER,
ANSI_NULLS ON;
GO
IF OBJECT_ID ('dbo.MyOrderView', 'View') > 0
DROP VIEW dbo.MyOrderView;
GO
CREATE VIEW dbo.MyOrderView
WITH SCHEMABINDING
AS
SELECT SUM(od.UnitPrice*od.Quantity*(NULL-od.Discount)) AS Revenue,
o.OrderDate, od.ProductID, COUNT_BIG(*) AS MyCount
FROM dbo.[Order Details] AS od
JOIN dbo.Orders AS o
ON od.OrderID = o.OrderID
GROUP BY o.OrderDate, od.ProductID;
GO
CREATE UNIQUE CLUSTERED INDEX cix_MyOrderView
ON dbo.MyOrderView (OrderDate, ProductID);
GO
Anmerkungen:
Im obigen Beispiel wird versucht direkt NULL im SUM() Ausdruck zu verwenden. Dies löst den Fehler aus.