Ich habe vor kurzem ein Projekt von einem ehemaligen Kollegen zugewiesen wurde, die SAP Bestandsinformationen zu synchronisieren. Ein Teil davon beinhaltet das Generieren von XML-Dateien - und hier liegt mein Dilemma.Verwendung von ROW_NUMBER mit nvarchar Schlüsseln
In der XML-Struktur I zu folgen, wird jeder Inventargegenstand in einem Message
Element mit einem numerischen ID enthalten sind, irgendwie wie folgt aus:
<Messages>
<Message>
<MessageID>1</MessageID>
<first item />
</Message>
<Message>
<MessageID>2</MessageID>
<second item />
</Message>
</Messages>
Die MessageID
Feld dient als eine Zeilennummer: es Schritten von 1 zur Anzahl der Zeilen in der Ergebnismenge. Das Problem ist, der Primärschlüssel der Tabelle ist nvarchar
aber ROW_NUMBER() OVER(ORDER BY)
erfordert eine bigint
Schlüssel, so dass der folgende Code:
SELECT
ROW_NUMBER() OVER(ORDER BY items.ItemCode) MessageID,
items.ItemCode as SKU
FROM OITM items
FOR XML PATH('Message'), ROOT('Messages')
nicht mit
Fehler auf numerische Datentyp varchar Umwandlung
Casting ItemCode
bis bigint
ist nicht möglich, da der Schlüssel in fast allen Zeilen nicht numerische Zeichen enthält. Es gibt auch keine anderen Schlüsselfelder in der Tabelle und das Hinzufügen von Hand ist nicht möglich, weil:
UPDATE
unterworfen wird und sperrt die Datenbank, wenn es Inkonsistenz feststellt.Ich kann die XML-Struktur nicht ändern, weil dann die API auf der anderen Seite es nicht akzeptiert.
Also meine Frage ist: Gibt es eine Möglichkeit ROW_NUMBER()
mit einem Schlüssel zu verwenden? Oder eine Alternative zu ROW_NUMBER()
, die mit nicht numerischen Tasten funktioniert?
Ich habe gerade Ihren Code ausprobiert und habe kein Problem, das erforderliche XML zu erzeugen, was Ihnen die Fehlermeldung gibt. Hinzufügen von Beispieldaten würde auch helfen. –
Ich stimme für das Schließen dieser Frage als Off-Topic ab, da der Benutzer die irrtümlich gestellte Frage angibt. Siehe ihre Antwort. –