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

Sql server 2008 r2 无法使用10.2B ODBC驱动程序更新链接服务器到进度数据库中包含连字符的表,sql-server-2008-r2,odbc,linked-server,progress-4gl,openedge,Sql Server 2008 R2,Odbc,Linked Server,Progress 4gl,Openedge,我目前正在使用Sql Server 2008 R2中的链接服务器连接,该连接使用Progress中的10.2B ODBC驱动程序连接到Progress数据库。我需要更新表,但表名包含连字符,字段都包含连字符 我看到了非常相似的情况,但没有答案可以帮助我,或者我根本不理解第一个反应。我不是一个追求进步的人,所以如果有进步设置,我需要帮助完成这些设置 我正在努力做到以下几点: UPDATE OPENQUERY(TESTCON, 'select * from CONTACT.PUB."tbl-mast

我目前正在使用Sql Server 2008 R2中的链接服务器连接,该连接使用Progress中的10.2B ODBC驱动程序连接到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.
我尝试了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.    
但是,我最终发现了一个不同的错误:

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或使用视图这两种方法都可以正确更新数据。如果表名中有连字符,我就无法让它工作。是否需要进行进度设置或其他操作才能使其正常工作?

我的第一个猜测是ODBC连接被设置为只读(它们应该是只读的)。尤其是看到,
用户没有写入该列的权限。


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

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

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

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

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

如果表名中没有连字符,我可以使用视图或openquery更新数据。只有包含连字符的表才会出现这种情况。我没有尝试更新结构,也不需要,因为这最终会消失。我们正在将进度数据库迁移为SQL数据库,并将进度代码迁移到.NET应用程序中。