Ausgabe
Ich habe das folgende Skript geschrieben, das über die Web-API verwendet werden soll:
CREATE PROCEDURE [dbo].[LWP_WEB_ENCODE]
@order_no int,
@dept varchar(2)
DECLARE @customer_no int
SET @customer_no = (SELECT customer_no FROM table_order
WHERE order_no = @order_no)
DECLARE @string varchar (4000), @encoded VARBINARY(max)
SELECT @string = CAST(@order_no AS varchar) + '-' +
CAST(@customer_no AS varchar) + '-' + @dept_abbreviation
SELECT @encoded = CONVERT(VARBINARY(MAX), @string)
SELECT @encoded AS 'encoded'
Wenn ich die Abfrage mit den folgenden Parametern ausführe:
exec [LWP_WEB_LWP_WEB_ENCODE] @order_no = 7267587, @dept_abbreviation = 'S'
Ich bekomme den folgenden String zurück
Ich mache dann dasselbe über den Postboten, um die Webanrufe zu simulieren und etwas völlig anderes zu erhalten
Ich bin mir nicht sicher, warum es sich so verhält – aber ich habe auch ein Skript, das die Zeichenfolge in die entgegengesetzte Richtung decodiert, und dieser bestimmte Wert funktioniert nicht
Das decodierte Verfahren führt im Grunde nur dies aus
SELECT CONVERT(VARCHAR(MAX), @encoded) AS 'decoded'
Wenn ich mein Skript ausführe
exec [LWP_WEB_DECODE] @encoded = 0x373236373538372D38373132323938372D53
Ich bekomme das in SQL
Dann versuche ich jedoch, den in Postman zurückgegebenen Wert auszuführen, den es hasst. Aus irgendeinem Grund wird er nicht wie in SQL codiert und es wird eine Zeichenfolge und kein Hexadezimalwert zurückgegeben
Lösung
Die gespeicherte Prozedur gibt binäre Daten zurück. SSMS zeigt Binärdaten an, indem es sie in einer Hex-Zeichenfolge codiert. JSON und XML können Binärdaten nicht direkt enthalten, verwenden aber meistens Base64 , um sie als Zeichenfolge zu codieren, anstatt eine Hex-Zeichenfolge zu verwenden.
Beantwortet von – David Browne – Microsoft
Antwort geprüft von – Senaida (FixError Volunteer)