Ok, du hast nicht erwähnt, dass du über den SQL-Verbindungsserver gehst.
Da liegt es nicht am ODBC-Treiber, denn der routed deine SQL's einfach durch, sondern an der MS-eigenen SQL-Syntax, die erst nach der eigenen Prüfung an den Verbindungsserver weitergereicht wird und dann dort auch scheitern kann (z.B. bei casesensitiven Namen, MS: [Name], SQL: "Name").

Versuche es mit Passthru-Abfragen an MS vorbei:

select * from OpenQuery('Verb.Server', 'select bla bla')

Ähnliches erlaubt auch die EXEC/EXECUTE-Anweisung für Nicht-Select's.