Nun kann ich nicht verstehen wieso ODBC bzgl. der SQL's an Grenzen stößt.
Ob du die SQL's per Procedure oder native ausführst macht da keinen Unterschied.
Du hast da halt Performanceprobleme, die eine Prozedur auch nicht auflöst wenn der SQL derselbe ist.
Die einzige Grenze die ich kenne ist die max. Länge des SQL-Strings:
Bei SBCS = 32K, bei Unicode = 16K.

Ansonsten gilt für Prozeduraufrufe, dass die Parameter genau zur Definition passen müssen.
Definierst du also CHAR(10), kannst du nicht CHAR(3) übergeben sondern musst mit Leerzeichen auffüllen oder per CAST('001' as char(10)) anpassen.
Besser wäre die Definition per VARCHAR(10), dann geht 0-10 Zeichen.

Noch besser wäre es, wenn du per ODBC mit Parametermarkern und Command-Objekten umgehst.