SQL Server 2008 R2 - 将Varchar(max)值转换为varbinary(max)

时间:2016-06-23 09:47:05

标签: sql-server sql-insert type-conversion varbinary

两台不同的服务器,都运行SQL Server 2008 R2。

在两台服务器上,我们运行相同的命令:

INSERT INTO Docs(IMG64) 
VALUES (CONVERT(VARBINARY(max), '/9j/4AAQSkZJRgABAQAAAQABAAD...')

当然,Img64的实际值比这里显示的要长很多。

Img64Docs的实际数据类型为VARCHAR(MAX)

在服务器X上,我们收到以下错误:

  

不允许从数据类型文本到varbinary(max)的显式转换。 (SQLSTATE = 22018)(529)(严重性= 16)(MsgState = 2)

在服务器Y上,使用与完全相同的表完全相同的语句,不会收到任何错误。

我们已经尝试根据Server X的表构建重建服务器Y上的表,但无济于事。

我们尝试在SQL Server的其他几个版本(包括2005年,2008年和2014年)中的同一个表构建上运行相同的SQL语句,没有问题。

任何人都可以帮助我了解造成这个问题的原因吗?任何帮助将不胜感激。

注意:两个服务器(2008R2)的兼容级别设置为90.其他服务器(2005,2008,2014)的兼容性分别适当地设置为每个不同的实例。

1 个答案:

答案 0 :(得分:1)

这两台服务器上的数据库是否使用不同的兼容级别

某些转换函数的行为有所不同,具体取决于数据库的兼容级别。兼容级别80(SQL Server 2000)例如类似于SQL Server 2005 中引入的varchar(max)varbinary(max)等数据类型(兼容性)等级90)