我编写了以下脚本,以便通过Web API使用:
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'
当我使用下列参数执行查询时:
exec [LWP_WEB_LWP_WEB_ENCODE] @order_no = 7267587, @dept_abbreviation = 'S'
我得到下面的字符串
然后我通过postman做同样的事情,努力模拟Web调用,得到完全不同的结果
我不知道它为什么会这样--但我有一个脚本,它以相反的方向解码字符串,这个特定的值不起作用
解码后的程序基本上只运行
SELECT CONVERT(VARCHAR(MAX), @encoded) AS 'decoded'
当我运行脚本时
exec [LWP_WEB_DECODE] @encoded = 0x373236373538372D38373132323938372D53
我在SQL中得到这个
然而,我尝试运行在postman中返回的值,它讨厌它。由于某种原因,它没有像我在SQL中那样对它进行编码,它返回的是字符串,而不是十六进制值
1条答案
按热度按时间rdrgkggo1#
存储过程返回二进制数据。SSMS通过将二进制数据编码为十六进制字符串来显示二进制数据。JSON和XML不能直接包含二进制数据,但通常使用Base64将其编码为字符串,而不是使用十六进制字符串。