Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема со старшим разрядом / 3 сообщений из 3, страница 1 из 1
19.11.2002, 12:28:50
    #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
19.11.2002, 12:47:17
    #32069561
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со старшим разрядом
Код: plaintext
Field_31 = case when @FIELDMSK & 0x80000000 !>  0  then @Field_31 else Field_31 end, 
...
Рейтинг: 0 / 0
19.11.2002, 12:51:19
    #32069566
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со старшим разрядом
Sorry
Код: plaintext
Field_31 = case when @FIELDMSK & 0x80000000 !=  0  then @Field_31 else Field_31 end,
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема со старшим разрядом / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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