web-dev-qa-db-fra.com

Entier Constantes de valeur max dans SQL Server T-SQL?

Existe-t-il des constantes dans T-SQL comme dans d'autres langages qui fournissent les plages de valeurs max et min de types de données tels que int?

J'ai une table de codes où chaque ligne a une colonne de plage supérieure et inférieure, et j'ai besoin d'une entrée qui représente une plage où la plage supérieure est la valeur maximale qu'un int peut contenir (un peu comme un infini hackish). Je préfère ne pas le coder en dur et utiliser à la place quelque chose comme SET UpperRange = int.Max

41
AaronLS

Il y a deux options:

  • fonction scalaire définie par l'utilisateur
  • tableau des propriétés

Dans Oracle, vous pouvez le faire dans les packages - le SQL Server le plus proche est les assemblys ...

12
OMG Ponies

Je ne pense pas qu'il existe de constantes définies, mais vous pouvez les définir vous-même en stockant les valeurs dans une table ou en utilisant une fonction de valeur scalaire.

Tableau

Configurez une table qui comporte trois colonnes: TypeName, Max et Min. De cette façon, vous ne devez les remplir qu'une seule fois.

Fonction de valeur scalaire

Alternativement, vous pouvez utiliser des fonctions à valeurs scalaires GetMaxInt () par exemple (voir ceci réponse StackOverflow pour un exemple réel.

Vous pouvez trouver toutes les valeurs max/min ici: http://msdn.Microsoft.com/en-us/library/ms187752.aspx

8
vfilby

Évitez les fonctions scalaires comme la peste:
Problème de performance UDF scalaire

Cela étant dit, je n'utiliserais pas la table à 3 colonnes suggérée par une autre personne.
Cela entraînerait des conversions implicites à peu près partout où vous l'utiliseriez.
Vous devrez également vous joindre à la table plusieurs fois si vous devez l'utiliser pour plusieurs types.

Ayez à la place une colonne pour chaque min et max de chaque type de données (défini en utilisant son propre type de données) et appelez-les directement pour comparer.

Exemple:

SELECT *
  FROM SomeTable as ST
  CROSS JOIN TypeRange as TR
  WHERE ST.MyNumber BETWEEN TR.IntMin  AND TR.IntMax
3
MikeTeeVee