无法使用 10.2B ODBC 驱动程序将链接服务器中包含连字符的 table 更新为 Progress Database

Unable to update table containing hyphens in Linked Server to Progress Database using 10.2B ODBC drivers

我目前在 Sql Server 2008 R2 中使用链接服务器连接到使用 Progress 的 10.2B ODBC 驱动程序的 Progress 数据库。我需要更新 table,但 table 名称包含一个连字符,并且所有字段都包含连字符。

我看到 this 非常相似的情况,但是没有对我有帮助的答案,或者我根本不理解第一个响应。我不是 Progress 的人,所以如果有 Progress 设置,我需要帮助来完成这些设置。

我正在尝试执行以下操作:

UPDATE OPENQUERY(TESTCON, 'select * from CONTACT.PUB."tbl-mast" where "mast-id" = ''A12''') set "col-name" = 'tom'

这会产生错误:

OLE DB provider "MSDASQL" for linked server "TESTCON" returned message "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".
Msg 7344, Level 16, State 2, Line 3
The OLE DB provider "MSDASQL" for linked server "TESTCON" could not UPDATE table "[MSDASQL]" because of column "col-name". The user did not have permission to write to the column.

我已尝试 this progress 建议的解决方法,但出现不同的错误:

UPDATE contact_vwTblmast set col_name = 'tom' where mast_id = 'A12';

但是,我遇到了一个不同的错误:

Msg 7399, Level 16, State 1, Line 2
The OLE DB provider "MSDASQL" for linked server "testcon" reported an error. The provider did not give any information about the error.
Msg 7306, Level 16, State 2, Line 2
Cannot open the table ""contact"."PUB"."tbl-mast"" from OLE DB provider "MSDASQL" for linked server "testcon". Unknown provider error.    

我可以成功查询数据库。以下将起作用:

SELECT * FROM OPENQUERY(TESTCON, 'select * from CONTACT.PUB."tbl-mast" where "mast-id" = ''A12''')

如果 table 不包含连字符,上述所有操作都可以正常工作。 OPENQUERY 或使用视图这两种方法都可以正确更新数据。如果 table 名称中有连字符,我就无法让它工作。是否有进度设置或其他需要做的事情才能让它工作?

我的第一个猜测是 ODBC 连接设置为只读(它们应该是)。特别是看到,The user did not have permission to write to the column.

您是否能够通过 ODBC 驱动程序使用其他查询成功更新 tables? table 中的数据和 table 结构本身?

解决方案是使用批处理文件,sqlexp.bat。 Progress SQL 视图与在进度数据库中创建的 SQL-92 视图之间存在差异。必须使用 Progress SQL Explorer (sqlexp.bat) 创建视图。

对我来说,它是 C:\Progress\OpenEdge\bin\sqlexp.bat,命令行参数是连接设置。执行此操作后,将弹出 java 命令行屏幕。这是您指定 CREATE VIEW 语句的地方。

CREATE VIEW ODBC.contact_vwTblmast (...) AS SELECT ... FROM PUB."tbl-mast"

请注意,'owner' 有限制,您可以在创建这些视图时使用。您不能指定 PUB 的所有者。