无法使用10.2B ODBC驱动程序将链接服务器中包含连字符的表更新为进度数据库

时间:2015-01-20 22:26:37

标签: sql-server-2008-r2 odbc linked-server progress-4gl openedge

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

我看到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解决方法并得到了不同的错误:

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''')

如果表格不包含连字符,则上述所有工作都完美无缺。两种方法,OPENQUERY或使用视图都可以正确更新数据。如果表名中有连字符,我就无法使其工作。是否有进度设置或其他需要做的事情才能使其发挥作用?

2 个答案:

答案 0 :(得分:0)

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

您是否能够通过ODBC驱动程序与其他查询成功更新表?表中的数据和表结构本身都是什么?

答案 1 :(得分:0)

解决方案是使用批处理文件sqlexp.bat。 Progress SQL Views和在progress数据库中创建的SQL-92 Views之间存在差异。必须使用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"

注意,“所有者”有一个限制,您可以在创建这些视图时使用。您无法指定PUB的所有者。