mam nadzieję, że to pomoże (nie używam SQL Server 2012).
jeśli ODBC łączy się z db2, dla zakresu dat nie jest obsługiwany, np. '0001-01-01', musisz rzucić. Normalnie to działa.
SELECT *
FROM OPENQUERY(LINKEDSERVERNAME, 'SELECT Product,
CAST(DateLastReceipt AS CHAR(10))
FROM ProductTable')
Jeśli nadal chcesz, aby wynik był datą, po prostu użyj CASE i zamień nieprawidłową datę na datę domyślną, np.
SELECT *
FROM OPENQUERY(LINKEDSERVERNAME, 'SELECT Product,
,CASE WHEN DateLastReceipt AS CHAR(10)) = ''0001-01-01''
THEN CURRENT_DATE
ELSE DateLastReceipt
END
FROM ProductTable')
Być może trzeba będzie zmienić CURRENT_DATE na CURRENT_TIMESTAMP, a skład CASE zależy od serwera bazy danych i wymagań