1

我已经成功地在 SQL Server 2008 R2 和 Postgres 数据库之间创建了一个链接服务器,并且一切正常,除非我尝试运行一个返回 TEXT 列的存储过程。

被调用的存储过程(postgres 中的函数)的最上面几行是:

CREATE OR REPLACE FUNCTION get_defects()
  RETURNS TABLE(defectid bigint, featurevalues text) AS ...

该函数显然在 postgres 中正确执行,但是当我尝试通过链接服务器在 SQL Server 中执行该函数时:

SELECT *
FROM OPENQUERY(POSTGRES, 'SELECT * FROM get_defects()')

我得到错误:

链接服务器“POSTGRES”的 OLE DB 提供程序“MSDASQL”返回消息“请求的转换不受支持。”。

消息 7341,级别 16,状态 2,第 1
行无法从链接服务器“POSTGRES”的 OLE DB 提供程序“MSDASQL”获取列“[MSDASQL].featurevalues”的当前行值。

问题似乎出在尝试返回 TEXT 列featurevalues时,因为以下查询按预期执行:

SELECT defectid
FROM OPENQUERY(POSTGRES, 'SELECT * FROM get_defects()')

任何帮助将不胜感激..

4

1 回答 1

0

我会同意 Pavel 的建议:

 SELECT defectid bigint, featurevalues::varchar(4000) from get_defects();

尽管 SQL 主要是一种严格类型的语言,但我认为值得讨论,因此您需要考虑 PostgreSQL 对此类类型的处理不一定是 SQL Server 所期望的。如果 SQL Server 无法处理它,您将收到类似这样的错误。

于 2013-11-27T09:28:21.603 回答