This is about the best I can come up with.

```
select
-- convert string to time value
CONVERT(time
-- insert a colon between hours and minutes (position 3)
, STUFF(
-- insert a colon between minutes and seconds (position 5)
STUFF(
-- convert to string, pad left with zeroes to 6 characters
RIGHT('000000' + CONVERT(varchar(6), @time_value_int), 6)
, 5, 0, ':')
, 3, 0, ':')
) as time_converted
```

I initially started down the math route by taking the integer time value and using integer division and modulus to get the hours, minutes and seconds parts, and multiplying by the float equivalent of that time part (hours = 1 / 24.0, minutes = ( 1 / 24.0 / 60.0 ), seconds = ( 1 / 24.0 / 3600.0 ) then adding those together, only to find that you can't convert a float to the TIME data type. It does covert to DATETIME, which you can then convert to TIME, but it seems there is a loss in precision, so the result may be a few milliseconds off.

So the text-munging approach seems cleaner.