Supposons que votre nom de colonne est N. Essayez quelque chose comme
CHECK(LOG(N)/LOG(2) = TRUNC(LOG(N)/LOG(2)))
Le but est de vérifier que le logarithme binaire de la valeur N est un entier, ce qui voudrait dire que N était une puissance de 2. Non Assurez-vous que SQL Server prend en charge les fonctions LOG et TRUNC - remplacez-les par les noms appropriés si nécessaire. Edit: en relisant ceci, j'ai réalisé que l'arrondi pouvait causer un problème (j'ai oublié le deuxième commandement du point flottant, qui est: Tu ne compareras jamais les valeurs des virgules flottantes pour l'égalité!). OK, qu'en est-il
CHECK(ABS(LOG(N)/LOG(2) - TRUNC(LOG(N)/LOG(2))) < 0.00001)
ou de remplacer n'importe quelle tolérance d'erreur que vous souhaitez pour le 0.00001.
Partagez et appréciez.
Pouvez-vous expliquer pourquoi vous faites cela? – JonH
Ok, il m'est juste venu à l'esprit que je devrais plutôt stocker n que 2 puissance n :) Affaire résolue! – Andrey