Después de mucho trabajar ya encontramos el arreglo de este atolladero que algunos usuarios de este sitio web tienen. Si deseas compartir algún detalle no dudes en dejar tu comentario.
Solución:
Cuando SQL Server encuentra su $
signo, automáticamente lo convierte en un money
tipo de datos. Debido a que no tiene un valor explícito después del signo de dólar, SQL Server asume 0.00
. Desde MSDN:
Al convertir a
money
osmallmoney
, se supone que los números enteros son unidades monetarias. Por ejemplo, el valor entero de 4 se convierte en el equivalente en dinero de 4 dólares (para us_english, el idioma predeterminado). Los números a la derecha del decimal en valores de coma flotante se redondean a cuatro lugares decimales para valores monetarios. Las expresiones de tipos de datos char o varchar que se están convirtiendo a un tipo de datos enteros deben constar solo de dígitos y un signo más o menos opcional (+ o -). Los espacios en blanco iniciales se ignoran. Las expresiones de tipos de datos char o varchar convertidas en dinero también pueden incluir un punto decimal opcional y un signo de dólar inicial ($).
Después de jugar un poco, me di cuenta de que esto sucede sin importar qué símbolo de moneda se use, el servidor SQL implica que el campo es un campo de moneda.
Si agrega números después del símbolo de la moneda, en este caso un dólar, entonces:
SELECT $4
El servidor SQL devolverá 4.00
Entonces, SQL Server está usando $ y suponiendo que queremos crear un campo con el DINERO tipo de datos y como no hemos ingresado un valor después del símbolo de moneda, SQL Server asume que el valor es 0, aunque en mi opinión esto debería devolver NULL.
Puede probar que SQL Server lo está tratando como un money
tipo:
select $ as n into #x
exec tempdb..sp_help '#x'
sp_help
generará (entre otras cosas):
Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation
-------------- ------- ----------- --------- ------- -------- ----------- --------------------- ----------------------- ------------
n money no 8 19 4 no (n/a) (n/a) (null)
Si haces scroll puedes encontrar las interpretaciones de otros administradores, tú asimismo puedes dejar el tuyo si lo deseas.