Установка ограничения столбцов в таблице (SQL Server)

У меня есть столбец, который должен содержать одно из значений 2 power n: 2,4,8,16,32 и т. Д. Я хочу обеспечить, чтобы на уровне схемы таблицы был ли способ указать такое ограничение столбца?

Благодаря!

В SQL Server:

ALTER TABLE [dbo].[PowerOfTwo] WITH CHECK ADD CONSTRAINT [CK_PowerOfTwo] CHECK ((log([Value])/log(2)=round(log([Value])/log(2), 0, 1))) 

Бесстыдно крадя от этого ответа, вы могли бы использовать побитовые операции, чтобы сделать это довольно эффективно.

 ALTER TABLE tablename ADD CONSTRAINT ckname CHECK (colName > 0 AND (colName & (colName - 1) =0)) 

как насчет определения столбца как N., тогда все применения этого столбца были бы 2 ^ n по определению вместо ограничения.

в противном случае – вы можете установить триггерную логику для проверки каждого значения по мере его ввода или обновления.

Предположим, что ваше имя столбца 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.

Поделитесь и наслаждайтесь.

Создать проверку столбца:

 CHECK (column_name IN (2, 4, 8, 16, 32, ..., 2147483648)) 
  • Получить список ограничений SQL Server без избыточности
  • Как создать уникальное ограничение SQL на основе двух столбцов?
  • Разница между ограничениями и правилами в SQL
  • Является ли автогенерированное имя ограничения в SQL Server одинаковым?
  • T-SQL, какое ограничение использовать
  • Переименовать ограничение в SQL Server?
  • Как вы удаляете столбец с неопределенным значением ограничения по умолчанию и неизвестными индексами
  • Хорошо ли использовать контрольные ограничения для бизнес-правил
  • Ограничение проверки SQL Server
  • Ограничение нижнего регистра - Sql Server
  • Что я могу сделать с ограничением FK в SQL Server?
  • Interesting Posts

    Чтение выделенного уровня изоляции моментальных снимков

    Будет ли архивирование большого количества старых данных заблокировать мою базу данных?

    Поведение ISNULL на сервере sql

    SQL возникла проблема с отправкой команды в программу

    Опасаясь рекурсии при удалении строк с помощью внешних ключей

    Заблокируйте строку в течение одной транзакции и запустите блокировку в другой транзакции

    Предоставление имени столбца для итоговой таблицы

    Как работает TSQL Merge? Производительность против UPDATE и INSERT

    SQL Server Добавьте уникальный идентификатор в каждую таблицу в базе данных

    Общая база данных в локальной сети

    SQL: как выбрать различные значения из таблицы в другой таблице?

    Недопустимое имя столбца в Select Statement

    Каков простой способ репликации данных из SQL Server в SAP HANA?

    WHERE при определении последнего времени входа с шаблоном в SQL

    Зацикливание некоторых выбранных значений в хранимой процедуре

    Давайте будем гением компьютера.