Ich verwende SQL Server 2014 Developer Edition Service Pack 2 auf Windows 7 Enterprise-Computer.SQL Server 2014 Set-basierte Methode zum Erstellen einer eindeutigen Ganzzahl für eine Zeichenfolge Kombination Eingabe
Die Frage
Gibt es eine Reihe basiert Weise, dass ich eine ganze Feld auf einem String-Input basiert schaffen können? Es muss sicherstellen, dass das Feld Entity ID
niemals für verschiedene Eingaben dupliziert wird?
Hypothetische Tabellenstruktur
|ID|Entity ID|Entity Code|Field One|From Date|To Date |
|1 |1 |CodeOne |ValueOne |20160731 |20160801|
|2 |1 |CodeOne |ValueTwo |20160802 |NULL |
|3 |2 |CodeTwo |ValueSix |20160630 |NULL |
die obige Tabelle, ich versuche, einen Weg zu finden, die Entity ID
basierend auf dem Entity Code
Feld zu erzeugen (es ist möglich, dass wir eine Kombination von Feldern verwenden würden,)
Was bisher habe ich versucht habe
- Verwenden eines Sequenzobjekts (nicht erwünscht, weil die Sequenz gelöscht werden und die Zählung zurückgesetzt werden kann)
- Erstellen einer Tabelle zum Verfolgen der Entitäten, Erstellen einer neuen
Entity ID
jedes Mal, wenn eine neue Entität gefunden wird (mag das nicht, weil es keine Set-basierte Operation ist) - Erstellen eines Hashbyte auf dem
Entity Code
Feld und Konvertieren dieser in einBIGINT
(Ich habe keinen Beweis, dass dies nicht funktioniert, aber es fühlt sich nicht so an eine robuste Lösung)
Vielen Dank im Voraus alle.
Können Sie bitte geben Sie einige Beispiele ... für diese Aussage .. "Gibt es einen satzbasierten Weg, wie ich ein Integer-Feld basierend auf einer String-Eingabe erstellen kann?" – TheGameiswar
Wenn Sie meinen, dass Sie eine Zeichenfolge verwenden und eine eindeutige und _reproductive_ Ganzzahl mit keinem anderen Kontext ableiten möchten, dann Nein. Ein Hash kann mehrere verschiedene Zeichenfolgen auf denselben Wert reduzieren. Sie können das Spiel des Erstellens eines Wertes, z. durch Hashing und dann Inkrementieren, bis Sie einen zuvor unbenutzten Wert finden, der jedoch Kontext erfordert, d. h. alle zuvor zugewiesenen Werte, und nicht mit nur der Zeichenkette als Eingabe reproduziert werden kann. Sonderfälle können z. Wenn Sie wissen, dass die Länge der Zeichenfolge niemals vier Zeichen überschreiten wird, ist der Zeichensatz begrenzt, .... – HABO
Ich glaube, der einzige Weg, dies zu erreichen, ist mit einem 'cursor', der prüft, ob jeder'EntityCode' bereits eingefügt wird und wenn nicht, wird die maximale 'EntityID' inkrementiert, um eine neue' EntityID' zu erzeugen 'Entitätscode'. Das würde offensichtlich sehr langsam ablaufen und überhaupt nicht gesetzt werden. – iamdave