Felizmente(?), no SQL Server 2012+ , agora você pode usar FORMAT() Para alcançar isto:
FORMAT(@s,'#,0.0000')
Nas versões anteriores, correndo o risco de ficar muito feio
[Consulta] :
declare @s decimal(18,10);
set @s = 1234.1234567;
select replace(convert(varchar,cast(floor(@s) as money),1),'.00',
'.'+right(cast(@s * 10000 +10000.5 as int),4))
Na primeira parte, usamos MONEY->VARCHAR para produzir as vírgulas, mas FLOOR() é usado para garantir que os decimais vão para
.00
. Isso é facilmente identificável e substituído pelos 4 dígitos após a casa decimal usando uma mistura de deslocamento (*10000
) e CAST como INT (truncamento) para derivar os dígitos. [Resultados] :
| COLUMN_0 |
--------------
| 1,234.1235 |
Mas, a menos que você precise entregar relatórios de negócios usando o SQL Server Management Studio ou SQLCMD, isso é NUNCA a solução correta, mesmo que isso possa ser feito. Qualquer ambiente front-end ou de relatórios possui funções adequadas para lidar com a formatação de exibição.