Vous obtenez cette plage avec bigint :
-2^63 to 2^63-1
also known as roughly:
-9.2 x 10^18 to 9.2 x 10^18
Vous obtenez cette plage avec décimal(18,0) :
-10^18 to 10^18
Décimal :octets de stockage par précision
Precision Storage Bytes
1-9: 5
10-19: 9
20-28: 13
29-38: 17
Types entiers et octets de stockage
integer type Storage Bytes
bigint 8
int 4
smallint 2
tinyint 1
Réflexions
Les deux exemples publiés dans votre question donnent en fait pratiquement la même quantité de valeurs uniques.
De plus, vous n'allez pas voir un changement de performance significatif quel que soit votre choix, mais vous verrez un changement d'efficacité pour les autres programmeurs de l'équipe si vous commencez à utiliser des décimales là où les programmeurs attendent un entier. C'est un point mineur.
Pour résoudre votre problème spécifique, si vous souhaitez une plage plus large, utilisez Decimal(38,0). Cela vous donne :
-10^38 to 10^38
Si vous êtes préoccupé par la vitesse, utilisez la précision minimale qui durera toute la durée de vie de votre logiciel.
Si vous ne mesurez pas le temps en nanosecondes, choisissez l'option qui conviendra le mieux à l'état d'esprit de vos programmeurs et à votre désir d'avoir une très longue série de chiffres.
Références