SQL Server: varbinary или интервал для хранения небольшой маски?

count3=0;
until [ "$count2" == 2 ]; do
    printLine "$TILE_BLACK"
    printLine "$TILE_WHITE"
    count3=$(($count3 + 1))
done 

Вот мертвая петля. Вы проверяете count2 на наличие условия окончания цикла, но просто обновляете count3. Исправьте это.

11
задан Cade Roux 12 May 2009 в 16:39
поделиться

4 ответа

Вы обязательно должны использовать INT (если вам нужно 32 флага) или BIGINT (для 64 флагов). Если вам нужно больше флагов, вы можете использовать BINARY (но вам, вероятно, также следует спросить себя, зачем вам так много флагов в вашем приложении).

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

Если вам нужно больше флагов и вам нужно использовать BINARY , вы теряете встроенную поддержку для побитовых операторов и, следовательно, простую поддержку для проверки значений флага. Возможно, я бы перенес проверку значений флагов в клиентское приложение, но если вам удобно программировать на T-SQL, это тоже вариант. Если ты'

15
ответ дан 3 December 2019 в 04:34
поделиться

Обычно считается предпочтительным использовать набор битовых столбцов вместо битовой маски. Они будут упакованы вместе на странице, поэтому они не будут занимать больше места. Хотя я тоже, кажется, всегда использую столбец int или bigint, чтобы избежать ввода всех имен столбцов ... но с intellisense я бы, вероятно, пошел с битовыми столбцами.

6
ответ дан 3 December 2019 в 04:34
поделиться

Я обычно согласен с ответом @ hainstech об использовании битовых полей, потому что вы можете явно назвать каждое битовое поле, чтобы указать, что это должно хранить. Однако я не видел практического подхода к сравнению битовых масок с битовыми полями. С помощью побитовых операторов SQL Server (&, |, etc ...) легко узнать, установлен ли диапазон флагов. Для этого нужно проделать гораздо больше работы с операторами равенства для большого числа битовых полей.

1
ответ дан 3 December 2019 в 04:34
поделиться

Что ж, учитывая, что int имеет меньше места для хранения и, как правило, с ним немного проще работать, я не уверен почему вы используете varbinary.

2
ответ дан 3 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: