powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема со старшим разрядом
3 сообщений из 3, страница 1 из 1
Проблема со старшим разрядом
    #32069546
f_mikle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Пишу я в MSSQL7 в процедуре в составе "UPDATE" следующую конструкцию :
Field_31 = ( CASE WHEN ( @FIELDMSK & -2147483648 <> 0 ) THEN @Field_31 ELSE Field_31 END ),
то есть в зависимости от старшего (31-го, если считать от 0) разряда "@FIELDMSK" я либо обновляю поле Field_31 на "@Field_31", либо оставляю прежним.
Проблема в том, что с 31-м разрядом такую конструкцию не берет, невразумительно ругаясь "Invalid operator for data type. Operator equals boolean AND, type equals numeric.". Со всеми остальными разрядами все благополучно.
Когда пишу в начале процедуры
DECLARE @BIT31 INT
SELECT @BIT31 = -2147483648
и затем в UPDATE
Field_31 = ( CASE WHEN ( @FIELDMSK & @BIT31 <> 0 ) THEN @Field_31 ELSE Field_31 END ) - процедуру создает благополучно.
Подскажите пож. - это бага MSSQL или я чего-то не знаю или не понимаю?
...
Рейтинг: 0 / 0
Проблема со старшим разрядом
    #32069561
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Field_31 = case when @FIELDMSK & 0x80000000 !>  0  then @Field_31 else Field_31 end, 
...
Рейтинг: 0 / 0
Проблема со старшим разрядом
    #32069566
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry
Код: plaintext
Field_31 = case when @FIELDMSK & 0x80000000 !=  0  then @Field_31 else Field_31 end,
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема со старшим разрядом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]