Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:XML中十六进制值的编码?_Sql Server_Xml - Fatal编程技术网

Sql server SQL Server:XML中十六进制值的编码?

Sql server SQL Server:XML中十六进制值的编码?,sql-server,xml,Sql Server,Xml,当我在SQLServer中将十六进制值转储到XML输出中时,例如 0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8 我得到: /DNcECEQkcDhcAkP/56jm/XHKQk= 这看起来像是被编码为base64,但我尝试了不同的转换器,无法将第二个值重新转换为第一个值。有人知道SQL Server如何在XML中编码十六进制值吗?一种方法是使用hexToBinary函数: DECLARE @table TABLE(BinaryValue varbina

当我在SQLServer中将十六进制值转储到XML输出中时,例如

0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8
我得到:

/DNcECEQkcDhcAkP/56jm/XHKQk=

这看起来像是被编码为base64,但我尝试了不同的转换器,无法将第二个值重新转换为第一个值。有人知道SQL Server如何在XML中编码十六进制值吗?

一种方法是使用hexToBinary函数:

DECLARE @table TABLE(BinaryValue varbinary(MAX));
INSERT INTO @table(BinaryValue) VALUES(0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8);
SELECT
    CAST('' AS XML).value('xs:hexBinary(sql:column("BinaryValue"))', 'varchar(MAX)') AS HexString
FROM @table;
这将返回不带
0x
前缀的十六进制数字字符串:


103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8

一种方法是使用hexToBinary函数:

DECLARE @table TABLE(BinaryValue varbinary(MAX));
INSERT INTO @table(BinaryValue) VALUES(0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8);
SELECT
    CAST('' AS XML).value('xs:hexBinary(sql:column("BinaryValue"))', 'varchar(MAX)') AS HexString
FROM @table;
这将返回不带
0x
前缀的十六进制数字字符串:

103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8

看起来它已被编码为base64,[…]无法重新转换[…]。
有人知道SQL Server如何在XML中编码十六进制值吗

这是BLOB(二进制数据)的标准行为。它不是在很早的时候,但是-阿飞-自2005年以来它是:

任何二进制值都隐式转换为
base64
表示:

DECLARE @YourBinary VARBINARY(MAX)=0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8;

DECLARE  @xml XML =
(
    SELECT @YourBinary FOR XML PATH('test')
);

SELECT @xml;
--返回

可能是,您混淆了真实的二进制值,显示为十六进制字符串,而十六进制字符串实际上是一个字符串(一行字符)

看看数字。在XML中,您可以看到写入的数字,但您肯定知道,数字数据类型不会存储为一行数字。在XML中,任何数据都转换为定义格式的字符串表示形式。读取此数据需要重新转换回原始数据类型

如果你真的需要十六进制字符串作为一行十六进制字符,你可以按照丹·古兹曼的建议去做

更新:针对XML原始数据的
或针对XML自动数据的
的特殊处理:
在与Bogdan Sahlean讨论之后,我想补充一点,在大多数情况下,您希望对XML路径使用
。但是,在某些情况下,可以选择使用
显式
原始
自动
(尽管这种情况很少见……)。这些模式需要特别标记如何处理二进制数据:

SELECT 0x01 AS x FOR XML RAW, BINARY BASE64 --breaks without ", BINARY BASE64"
一些细节

看起来它已被编码为base64,[…]无法重新转换[…]。
有人知道SQL Server如何在XML中编码十六进制值吗

这是BLOB(二进制数据)的标准行为。它不是在很早的时候,但是-阿飞-自2005年以来它是:

任何二进制值都隐式转换为
base64
表示:

DECLARE @YourBinary VARBINARY(MAX)=0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8;

DECLARE  @xml XML =
(
    SELECT @YourBinary FOR XML PATH('test')
);

SELECT @xml;
--返回

可能是,您混淆了真实的二进制值,显示为十六进制字符串,而十六进制字符串实际上是一个字符串(一行字符)

看看数字。在XML中,您可以看到写入的数字,但您肯定知道,数字数据类型不会存储为一行数字。在XML中,任何数据都转换为定义格式的字符串表示形式。读取此数据需要重新转换回原始数据类型

如果你真的需要十六进制字符串作为一行十六进制字符,你可以按照丹·古兹曼的建议去做

更新:针对XML原始数据的
或针对XML自动数据的
的特殊处理:
在与Bogdan Sahlean讨论之后,我想补充一点,在大多数情况下,您希望对XML路径使用
。但是,在某些情况下,可以选择使用
显式
原始
自动
(尽管这种情况很少见……)。这些模式需要特别标记如何处理二进制数据:

SELECT 0x01 AS x FOR XML RAW, BINARY BASE64 --breaks without ", BINARY BASE64"

一些细节

Me Study在HASHBYTES中输入了错误的字符串,并怀疑是否存在不匹配的值。在今后提问之前,我会进行三次检查。我脸红了。我这个笨蛋在HASHBYTES中输入了错误的字符串,并对不匹配的值感到疑惑。在今后提问之前,我会进行三次检查。我脸红了。除了我的问题是垃圾这一事实之外,我认为这是答案,因为它可能最能解释MS SQL XML编码和转换问题。干杯。除了我的问题是废话之外,我认为这是答案,因为它可能最能解释MS SQL XML编码和转换问题。干杯