使用链接服务器和ODBC“不支持请求转换”

时间:2012-03-19 17:47:58

标签: utf-8 odbc ssms linked-server msdasql

我们的Web应用程序将UTF-8编码数据存储在VARCHAR字段中。最近,我们通过ODBC使用DataDirect的OpenAccess ODBC驱动程序为客户提供了访问此数据的权限。这是使用DataDirect的OpenAccess SDK实现的,编写C#.Net类以与服务接口。我们只允许客户执行SELECT查询。我们此时也将结果限制为100K行。

这个解决方案确实很有效,除了查询一些这些编码数据的字段对用户来说是胡言乱语,这是可以理解的。在我们服务的下一个版本中,我希望为用户提供使用未编码字符串进行查询的功能,然后查看未编码的结果。

我通过UTF-8编码传入的查询来解决这个问题,然后通过标记VARCHAR字段返回未编码的结果是WVARCHAR。这实际上工作得很好。但是,它确实意味着尽管存在(或缺少)Unicode字符,每个VARCHAR列都会作为WVARCHAR返回。

我们当时的许多客户都采用了在自己的SQL Server实例上在SSMS中创建链接服务器的方法,这是我首选的连接方法。由于我们的服务将结果限制为100K行,因此我鼓励大家使用OPENQUERY来执行查询。但是,似乎我在SSMS中的链接服务器配置中缺少某些东西。当对这些WVARCHAR列执行字符串函数(例如,LEFT,RIGHT,SUBSTRING)时,SSMS返回以下错误:

  

链接服务器“LOCAL”的OLE DB提供程序“MSDASQL”返回消息   “不支持请求的转换。” Msg 7341,Level 16,State 2,   第1行无法获取列“[MSDASQL] .ColName”列的当前行值   来自OLE DB提供程序“MSDASQL”的链接服务器“LOCAL”。

对于诸如此类的查询,将返回此内容:

SELECT *
FROM OPENQUERY([LOCAL], '
  SELECT LEFT(FirstName, 2) AS ColName
  FROM dbo.User 
')

如果我要从此查询中删除LEFT函数,将返回正确解码的FirstName列,而不会出错。

此问题不会影响MS Excel中的查询,例如。从表面上看,字符串似乎受到各自功能的正确影响,因为我通过与DataDirect产品接口的.Net类进行调试。我试图更改链接服务器属性上的所有服务器选项,但我没有找到合适的组合。我只是想找到合适的树在这里咆哮。是我对结果的处理,将它们改为WVARCHAR?或者我的SSMS链接服务器的某些属性是否需要更改我缺少?

1 个答案:

答案 0 :(得分:1)

在链接的服务器属性上,在COLLATION COMPATIBLE设置为TRUE时,问题得到解决。