Deterministische Zeichenfolge ersetzen und sortieren

8

Ich habe eine persistente berechnete Spalte, die Scalar Valued Function aufruft. Wie Sie wissen, muss diese Funktion deterministisch sein, um den Wert zu erhalten. Auch wenn REPLACE Funktion sich deterministisch verhält (ich kann ' Ich denke, ein Fall, wo es nicht ist), SQL Server scheint es als nicht deterministisch zu interpretieren. Daher kann ich es nicht in der Funktion verwenden.

Was ich versuche, ist die Konvertierung einiger nicht-englischer Zeichen ins Englische. Groß- / Kleinschreibung ist hier wichtig. Ich wollte die Buchstaben von ğĞüÜşŞıİöÖçÇ in gGuUsSiIoOcC umwandeln. Ich kann es erreichen (auf eine "nichtdeterministische Art"), indem ich einfach etwas wie folgt verwende:

%Vor%

SQL Server interpretiert diesen Code oben als nicht deterministisch ( demo ) wegen REPLACE und COLLATE (ich denke, dass er jedoch deterministisch ist) ..).

Eine andere Sache, die ich ausprobierte, war CHARINDEX mit < a href="https://technet.microsoft.com/en-us/library/ms188043(v=sql.105).aspx"> STUFF in einer WHILE -Schleife, musste aber aufgrund von Kollationierung verwendet werden die Notwendigkeit der Groß- / Kleinschreibung. Ohne die Sortierung behandelt SQL Server sie jedoch als deterministisch.

Was sind meine Optionen?

    
sotn 21.06.2017, 11:22
quelle

1 Antwort

5

Ist Ihre Spalte wirklich von varchar type, nicht nvarchar ?

Es sieht so aus, als ob COLLATE SQL_Latin1_General_CP1253_CS_AS deterministisch für nvarchar , aber nicht-deterministisch für varchar ist.

Die folgende Funktion ist deterministisch. Beachten Sie, dass Sie die Zeichenfolgenliterale mit N voranstellen müssen, damit sie korrekt funktioniert.

%Vor%

Wenn Sie varchar verwenden müssen, würde ich die binäre Sortierung verwenden, um bestimmte Zeichen zu ersetzen. Die folgende Funktion ist ebenfalls deterministisch.

%Vor%     
Vladimir Baranov 21.06.2017, 12:24
quelle

Tags und Links