Hashing mehr als 8000 bytes in SQL Server
SQL-Server die Hash-Funktion HASHBYTES
hat einen Eingabe-limit von 8000 bytes.
Wie Sie hash größeren strings?
Du musst angemeldet sein, um einen Kommentar abzugeben.
SQL-Server die Hash-Funktion HASHBYTES
hat einen Eingabe-limit von 8000 bytes.
Wie Sie hash größeren strings?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man hash-8k (oder 4k oder 2k) Stücke von den Eingangs-und dann entweder verketten diese hashes oder hash in einen neuen hash-Wert. Dies könnte schwierig sein, obwohl, wenn Sie um einen ähnlichen Algorithmus (in einer externen .NETTO-app zum Beispiel) zu vergleichen hashes erstellt, die außerhalb von SQL Server.
Andere Möglichkeit: Lean on SQL Server Die CLR-integration und führen hashing in einem .NET-assembly.
Könnten Sie schreiben, eine SQL CLR-Funktion:
Und dann kann es genannt werden, die in SQL so:
Den
BigHashBytes
ist nur notwendig, wenn die Länge wäre über 8k.[SqlFacet(MaxSize = -1)]
ansonsten bytes nach der 8000er würde einfach ignoriert werden! Dauerte eine Weile zu bekommen, dass man!NVARCHAR(4000)
fürSqlString
undNVARCHAR(MAX)
fürSqlChars
. Aber da um die Zeit von Visual Studio 2013, der Standard wurde geändert, umNVARCHAR(MAX)
für beide. Trotzdem, es ist immer besser zu werden explizite und verwenden[SqlFacet()]
wie Sie erwähnen, aber die Leute mit den neueren SSDT Versionen nicht treffen würden, die. Auch, SQLCLR nur unterstützenNVARCHAR
so wäre es eigentlich abschneiden bei 4000 chars :-).Wie Paul die Idee, eine Idee in den Sinn kommt für die Segmentierung wäre, die zum speichern der Hash-string in eine XML-Spalte, wobei jedes Stück als einen separaten XML-element.