When you use a linked server in SQL Server with the OLE DB provider for DB2 (DB2OLEDB), the
UPDATE/DELETE statement does not succeed if special characters are included in either the name of the library (or collection), or in the table name. These special characters include the "at" symbol (@), the "pound or sharp" symbol (#), and the dollar sign ($).
This problem does not occur with
SELECT/INSERT statements.
You may experience this problem when you use either four-part naming or OPENQUERY syntax. An
UPDATE/DELETE statement against the same library (collection) or table is successful from a standard ADO application outside SQL Server.
When you try to perform an update from Query Analyzer, you receive the following error message:
Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'DB2OLEDB' reported an error.
[OLE/DB provider returned message: Insufficient base table information for updating or refreshing.]
When you try to perform a delete from Query Analyzer, you receive the following error message:
Server: Msg 7345, Level 16, State 1, Line 1
OLE DB provider 'DB2OLEDB' could not delete from table 'CATALOGNAME.LIB$NAME.TABLENAME'. There was a recoverable, provider-specific error, such as an RPC failure.
[OLE/DB provider returned message: Insufficient base table information for updating or refreshing.]
A SQL Profiler trace of this problem lists the following error:
OLE/DB Provider 'DB2OLEDB' IRowsetChange::SetData returned 0x80004005