两台不同的服务器,都运行SQL Server 2008 R2。
在两台服务器上,我们运行相同的命令:
INSERT INTO Docs(IMG64)
VALUES (CONVERT(VARBINARY(max), '/9j/4AAQSkZJRgABAQAAAQABAAD...')
当然,Img64的实际值比这里显示的要长很多。
表Img64
中Docs
的实际数据类型为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)的兼容性分别适当地设置为每个不同的实例。
答案 0 :(得分:1)
这两台服务器上的数据库是否使用不同的兼容级别?
某些转换函数的行为有所不同,具体取决于数据库的兼容级别。兼容级别80(SQL Server 2000)例如不类似于SQL Server 2005 中引入的varchar(max)
和varbinary(max)
等数据类型(兼容性)等级90)