Was ist eine ungenaue Spalte in SQL Server?

8

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:

%Vor%     
TN. 07.05.2012, 14:41
quelle

3 Antworten

9

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.

    
JNK 07.05.2012, 15:07
quelle
6

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).

    
Eric Petroelje 07.05.2012 14:54
quelle
1

Hast du es versucht:

%Vor%

Ссылка

Ссылка

Klingt so, als ob die Fehlermeldung irreführend ist, weil CLR-berechnete Spalten trotzdem beibehalten werden müssen (um indiziert zu werden).

    
Cade Roux 07.05.2012 15:20
quelle