首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL Server的VarBinary (最大)列上插入数据不会插入全长VarBinary

在SQL Server的VarBinary (最大)列上插入数据不会插入全长VarBinary
EN

Stack Overflow用户
提问于 2020-07-01 22:53:13
回答 1查看 56关注 0票数 0

我得到了以下SQL代码( varbinary大约有90k个字符):

代码语言:javascript
复制
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.......

在我执行这段代码之后,如果我这样做了:

代码语言:javascript
复制
SELECT * FROM EXAMPLE_TABLE

我在OBJECT列中得到的结果只是我插入的字符的一半(大约45k个字符)。

我还尝试了以下几种方法:

代码语言:javascript
复制
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

同样的事情也会发生。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-07-02 10:34:52

我认为您正在理解什么是二进制文字。二进制文字是编码每个数据字节的0x加上2个十六进制字符。

在您的问题中,二进制文字的长度为89380个字符,即:

  • 2个字符用于0x
  • 89378个字符用于十六进制字符

这将编码44689字节的数据,即:89378 / 2 = 44689

如果你select datalength(object) from example_table你的问题的例子,你会得到44689,这是正确的长度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62679597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档