SQL ODBC silently truncating numeric data
If the parameter to the ODBC prepared statement is defined as decimal(18,0), that's how it's transmitted to the server.  The conversion is performed by the ODBC driver.  AFAIK the driver is not required by the standard to emit a diagnostic when dropping the fractional part on conversion to an integral type.  Presumably the user knows what he's doing.  ;-)  

I think you're mistaken, though.   From what I make of the NUMBER datatype, it's identical to SQL Server's decimal: you specify scale and precision up to a maximum of 38 digits.  How are they incompatible?  

If you really can't pass the data as a decimal type, I think I'd pass it as a varchar(30) and use a constraint on the SQL Server table to make sure it conforms.