我目前正在使用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或使用视图都可以正确更新数据。如果表名中有连字符,我就无法使其工作。是否有进度设置或其他需要做的事情才能使其发挥作用?
答案 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的所有者。