Se dovete accedere a dei dati su DB2 direttamente da SQL Server, passando tramite un linked server ed utilizzando il driver “Client Access” fornito da IBM, potreste imbattervi in questo “simpatico” errore:
Cannot fetch a row from OLE DB provider "IBMDA400" for linked server.
Errore molto esplicativo come leggete…cosa che mi ha fatto perdere un pò di tempo per cercare di capire cosa non stesse funzionando, dato che invece, ogni altro tentativo di accesso a DB2 funzionava correttamente.
Dopo un pò di ricerche ho trovato questo dettagliato articolo:
http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/8514b4bb-945a-423b-98fe-a4ec4d7366ea
Che spiega non solo come risolvere questo problema con i Linked Server, ma anche come poter risolvere altri problemi legati a DB2 ed Integration Services.
Se anche voi vi state imbattendo in questo problema e non avete voglia di leggervi tutto l’articolo suddetto, il succo tutto in questo poche righe di configurazione delle proprietà del driver OLEDB:
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'IBMDA400', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'IBMDA400', N'DynamicParameters', 1
GO
Et voiltà, errore sparito
.