Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 timestamp к bigint неявное преобразование  [new]
Wisky
Member

Откуда: Москва
Сообщений: 158
Приветствую.
В проекте существует самодельная миграция между локализованными серверами,
выгружающая дифференциал сравнивая update_timestamp типа timestamp со счетчиком предыдущей выгрузки @@DBTS приведенной к bigint.
Результаты выгрузок без явного преобразования
например: (update_timestamp>1000) и с явным (cast(update_timestamp as bigint)>1000) отличаются.
Механизм переносился из проекта в проект и только сейчас обнаружили этот баг.
Может это быть связанно с настройками или версиями сервера, не верится что так долго не сталкиваливались с этой ошибкой.
12 мар 14, 12:01    [15709107]     Ответить | Цитировать Сообщить модератору
 Re: timestamp к bigint неявное преобразование  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
Посмотрите внимательно Data Type Precedence в документации. Навскидку не помню, но скорее всего, когда вы делаете (update_timestamp>1000), то неявный каст делается не для той части выражения, о какой вы думаете.
12 мар 14, 12:12    [15709210]     Ответить | Цитировать Сообщить модератору
 Re: timestamp к bigint неявное преобразование  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
Wisky,

1000 - это не bigint. это просто int кагбе. а то, что не сталкивались - ну, мало ли. при тестировании в int, наверное, укладывались.

declare @v as binary(8);
set @v = 0x00000B00000003E5
select @v, cast(@v as int), cast(@v as bigint)

select case when @v > 1000 then '1' else  '2' end
select case when cast(@v as bigint) > 1000 then '1' else  '2' end

select sql_variant_property(1000, 'BaseType')
12 мар 14, 12:25    [15709334]     Ответить | Цитировать Сообщить модератору
 Re: timestamp к bigint неявное преобразование  [new]
Wisky
Member

Откуда: Москва
Сообщений: 158
1000 рассматривается как smallint, и некоторые timestamp'ы после неявного преобразования получают отрицательные значения.
Ох как же я так облажалась.
12 мар 14, 13:59    [15710289]     Ответить | Цитировать Сообщить модератору
 Re: timestamp к bigint неявное преобразование  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а чем вам binary(8) не подошел-то? хотя сам работаю со стэмпами и через binary и через bigint, но первое - сильно чаще
12 мар 14, 15:04    [15710916]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить