在sql server的varbinary(max)列上插入数据不会插入全长varbinary

t9aqgxwy  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(471)

我有以下sql代码(varbinary大约有90k个字符):

exec sp_executesql N'INSERT INTO EXAMPLE_TABLE (NAME, VERSION, OBJECT) 
                     VALUES (@P1, @P2, @P3)',
                   N'@P1 varchar(8000),@P2 varchar(8000),@P3 varbinary(max)',
                   'TEST', '1.0', 0x3C3F786D6C2076657273696F6E3D22312E302220656E63.......

执行此代码后,如果执行了:

SELECT * FROM EXAMPLE_TABLE

我得到的结果 OBJECT 列只有我插入的字符的一半(大约45k个字符)。
我还尝试了以下方法:

DECLARE @EXAMPLE AS VARBINARY(MAX)
SET @EXAMPLE = CONVERT(VARBINARY(MAX), <my varbinary>, 1)

EXEC sp_executesql N'INSERT INTO EXAMPLE_TABLE (NAME, VERSION, OBJECT) VALUES (@P1, @P2, @P3)',
                   N'@P1 varchar(8000),@P2 varchar(8000),@P3 varbinary(max)',
                   'TEST','1.0', @EXAMPLE

同样的事情也发生了。
提前谢谢。

qmb5sa22

qmb5sa221#

我想你已经明白了二进制文字是什么了。二进制文字是 0x 加上2个十六进制字符编码每个字节的数据。
在您的问题中,二进制文字长度为89380个字符,即:
2个字符代表 0x ,加
89378个字符表示十六进制字符
它编码44689字节的数据,即: 89378 / 2 = 44689 .
如果你 select datalength(object) from example_table 以你的问题为例,你得到44689,这是正确的长度。

相关问题