J'ai une bonne expérience dans SQL Server, mais tout à coup, j'ai découvert cette étrange commande SELECT
SELECT $
ou
SELECT $ FROM tableName
Il renvoie tout le temps une valeur scalaire nulle (0.00
), ou une nouvelle colonne avec toutes les valeurs de 0.00
Qu'est-ce que c'est?
Lorsque SQL Server rencontre votre $
signe, il le convertit automatiquement en un type de données money
. Étant donné que vous n'avez pas de valeur explicite après le signe dollar, SQL Server suppose que 0.00
. De MSDN :
Lors de la conversion en
money
ousmallmoney
, les entiers sont supposés être des unités monétaires. Par exemple, la valeur entière de 4 est convertie en équivalent monétaire de 4 dollars (pour us_english, la langue par défaut). Les nombres à droite de la décimale en valeurs à virgule flottante sont arrondis à quatre décimales pour les valeurs monétaires. Les expressions des types de données char ou varchar qui sont en cours de conversion en un type de données entier doivent être constituées uniquement de chiffres et d'un signe plus ou moins facultatif (+ ou -). Les blancs en tête sont ignorés. Les expressions de types de données char ou varchar converties en argent peuvent également inclure un point décimal facultatif et un signe dollar ($).
Après un peu déconner, j'ai pensé que cela se produit, quel que soit le symbole monétaire utilisé, le serveur SQL implique que le champ est un champ monétaire.
Si vous ajoutez des chiffres après le symbole monétaire, dans ce cas, un dollar donc:
SELECT $4
Le serveur SQL renverra 4,00
Donc, SQL Server utilise $ et suppose que nous voulons créer un champ avec le type de données MONEY et que nous n'avons pas entré de valeur après la devise symbole, SQL Server suppose que la valeur est 0, mais à mon avis, cela devrait retourner NULL.
Vous pouvez prouver que SQL Server le traite comme un type money
:
select $ as n into #x
exec tempdb..sp_help '#x'
sp_help
affichera (entre autres):
Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation
-------------- ------- ----------- --------- ------- -------- ----------- --------------------- ----------------------- ------------
n money no 8 19 4 no (n/a) (n/a) (null)