Предположим, ваше имя столбца N. Попробуйте что-то вроде
CHECK(LOG(N)/LOG(2) = TRUNC(LOG(N)/LOG(2)))
Цель состоит в том, чтобы убедиться в том, что двоичный логарифм величины N представляет собой целое число, которое означало бы, что N является степенью 2. Не конечно, если SQL Server поддерживает функции LOG и TRUNC - замените нужными именами по мере необходимости.
Редактировать: как я перечитал это, я понял, что округление может вызвать проблему (я забыл вторую заповедь плавающей точки, которая: никогда не будет сравнивать значения плавающей точки для равенства!). Хорошо, как насчет
CHECK(ABS(LOG(N)/LOG(2) - TRUNC(LOG(N)/LOG(2))) < 0.00001)
или замените любую погрешность, которую вы хотели бы получить за 0.00001.
Делитесь и наслаждайтесь.
Можете ли вы объяснить причину, почему вы это делаете? – JonH
Хорошо, мне просто пришло в голову, что я должен хранить n, чем 2 power n :) Дело решено! – Andrey