Usando dados monetários

O Microsoft SQL Server armazena dados monetários ou valores de moeda corrente, usando dois tipos de dados: money e smallmoney. Esses tipos de dados podem usar qualquer um dos seguintes símbolos de moeda.

Tabela de símbolos de moeda, valores hexadecimais

Os dados de moeda ou monetários não precisam ser incluídos entre aspas simples ( ' ). É importante lembrar que apesar de você poder especificar valores monetários precedidos por um símbolo de moeda, o SQL Server não armazena quaisquer informações de moeda associada com o símbolo, só armazena o valor numérico. Por exemplo, para atribuir um valor de 100 dólares a uma variável, você pode fazer o seguinte:

DECLARE @dollars AS money
SET @dollars = $100
SELECT @dollars

O valor retornado é 100.0000, sem um símbolo de moeda.

Se um objeto estiver definido como money, poderá conter um máximo de 19 dígitos, 4 dos quais podem ser à direita da vírgula. O objeto usa 8 bytes para armazenar os dados. O tipo de dados money tem então uma precisão de 19, uma escala de 4, e um comprimento de 8.

money e smallmoney são limitados a quatro pontos decimais. Use o tipo de dados decimal, se forem necessários mais pontos decimais.

Use um ponto para separar unidades monetárias parciais, como centavos, de unidades monetárias inteiras. Por exemplo, 2.15 especifica 2 dólares e 15 centavos.

Não são permitidos separadores de vírgula em money ou constantes smallmoney, embora o formato de representação visual desses tipos de dados inclua separadores de vírgula. Você pode especificar os separadores de vírgula só em cadeias de caracteres explicitamente convertidas a money ou smallmoney. Por exemplo:

USE tempdb;
GO
CREATE TABLE TestMoney (cola INT PRIMARY KEY, colb MONEY);
GO
SET NOCOUNT ON;
GO

-- The following three INSERT statements work.
INSERT INTO TestMoney VALUES (1, $123.45);
GO
INSERT INTO TestMoney VALUES (2, $123123.45);
GO
INSERT INTO TestMoney VALUES (3, CAST('$444,123.45' AS MONEY) );
GO

-- This INSERT statement gets an error because of the comma
-- separator in the money string.
INSERT INTO TestMoney VALUES (3, $555,123.45);
GO
SET NOCOUNT OFF;
GO
SELECT * FROM TestMoney;
GO