I'm not sure that this is a duplicate question.
I need to
select cast(round(123.4575, 3) as decimal(18,3))
This has been asked (many times). 5 is always rounded up by SQL Server. If you do not want to write your own routine look at Minh's answer here. This shows a neat trick to achieve what you want using a case statement and FLOOR.
Also an easy alternative is to subtract 1 from your number first at a precision 1 greater than your rounding, thus:
SELECT CAST(ROUND(123.4575 - 0.00001, 3) as decimal(18,3))
gives 123.457, whilst
SELECT CAST(ROUND(123.4576 - 0.00001, 3) as decimal(18,3))