Der Fehler wird nicht durch das Erstellen des Index verursacht. Der Fehler wird dadurch verursacht, TRY_CAST
dass die berechneten Spaltenwerte bei der Indexerstellung ausgewertet werden.
Wenn ich das mache:
SELECT TRY_CAST(REPLICATE(CONVERT(nvarchar(MAX), N'a'), 4001) AS bigint)
Ich bekomme den gleichen Fehler.
Die Dokumentation sagt (Hervorhebung von mir):
Wenn die Umwandlung erfolgreich ist, gibt TRY_CAST den Wert als angegebenen Datentyp zurück. Wenn ein Fehler auftritt, wird null zurückgegeben. Allerdings , wenn Sie eine Konvertierung anfordern , die nicht explizit erlaubt ist, dann scheitert TRY_CAST mit einem Fehler.
Nun, es ist nicht genau klar , welche unter Fällen es mit einem Fehler fehl (scheint Art von asinine den ganzen gegebenen Punkt der Funktion, aber trotzdem ...), so dass wir den Code durch Transformation des Eingangswertes reparieren können (Verwendung etwas angemessen für die Daten in Ihrer Tabelle), da keine große Zeichenfolge verarbeitet werden muss, wenn sie ohnehin nicht in eine Bigint passt:
SELECT TRY_CAST(LEFT(REPLICATE(CONVERT(nvarchar(MAX), N'1'), 4001), 100) AS bigint)
Dies wird zurückgegeben, NULL
da der Wert nicht gültig ist, aber nicht mit einem Fehler bombardiert wird.