Das Erstellen eines Indexes für eine berechnete Spalte vom Typ nvarchar
führt zu folgendem Fehler:
Der Index oder die Statistik "MyIndex" kann in der Tabelle "MyTable" nicht erstellt werden, weil Die berechnete Spalte 'MyColumn' ist ungenau und nicht persistent. Ziehen Sie in Betracht, die Spalte aus dem Index- oder Statistikschlüssel oder der Markierung zu entfernen berechnete Spalte beibehalten.
Was bedeutet Spalte ungenau ?
AKTUALISIEREN. Die Definition lautet wie folgt:
%Vor% UPDATE2. Der MyDeterministicClrFunction
ist wie folgt definiert:
Laut MSDN müssen CLR-Funktionsspalten zum Indizieren beibehalten werden:
Jede berechnete Spalte, die einen CLR-Ausdruck (Common Language Runtime) enthält, muss deterministisch sein und als PERSISTED markiert sein, bevor die Spalte indiziert werden kann. Benutzerdefinierte CLR-Ausdrücke sind in berechneten Spaltendefinitionen zulässig. Berechnete Spalten, deren Typ ein benutzerdefinierter CLR-Typ ist, können indiziert werden, solange der Typ vergleichbar ist. Weitere Informationen finden Sie unter CLR-benutzerdefinierte Typen.
Behalten Sie die Spalte und ich vermute, dass es funktioniert.
Aus der SQL Server-Dokumentation :
Ein float oder realer Ausdruck wird als ungenau angesehen und kann nicht a sein Schlüssel eines Indexes; Ein Float- oder Real-Ausdruck kann in einem Index verwendet werden Ansicht, aber nicht als Schlüssel. Dies gilt auch für berechnete Spalten. Irgendein Funktion, Ausdruck oder benutzerdefinierte Funktion wird als ungenau angesehen wenn es irgendwelche Fließkomma oder echte Ausdrücke enthält. Dies beinhaltet logisch Einsen (Vergleiche).
Tags und Links sql sql-server tsql sql-server-2008-r2