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

Откуда: Минск
Сообщений: 1747
Я так понимаю это баг?

      SELECT
        snwb.No_,
        snwb.[Departure Name],
        wbd.*
      FROM
        Sync_Nav_WayBill AS snwb
        JOIN WayBillDeparture AS wbd
          ON wbd.WayBillDepartureName = snwb.[Departure Name]
      WHERE
        (snwb.Arch = 1) AND
        (snwb.[Starting Date] > @date_beg) AND
        (snwb.[Starting Date] < @date_end)
      ORDER BY
        snwb.No_


К сообщению приложен файл. Размер - 25Kb
29 окт 18, 17:05    [21718216]     Ответить | Цитировать Сообщить модератору
 Re: Баг во время JOIN  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
X-Cite,

А где рисовался результат?
29 окт 18, 17:11    [21718221]     Ответить | Цитировать Сообщить модератору
 Re: Баг во время JOIN  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36980
Не видно всего, что скрывается за звездочкой. Мало ли там полей, похожих по написанию на WayBillDepartureName.
Если так?

      SELECT
        snwb.No_,
        snwb.[Departure Name],
        wbd.WayBillDepartureName
      FROM
        Sync_Nav_WayBill AS snwb
        JOIN WayBillDeparture AS wbd
          ON wbd.WayBillDepartureName = snwb.[Departure Name]
      WHERE
        (snwb.Arch = 1) AND
        (snwb.[Starting Date] > @date_beg) AND
        (snwb.[Starting Date] < @date_end)
      ORDER BY
        snwb.No_


Сообщение было отредактировано: 29 окт 18, 17:12
29 окт 18, 17:12    [21718222]     Ответить | Цитировать Сообщить модератору
 Re: Баг во время JOIN  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1747
В Студии...
Сервера 2014-ые sp1 cu3

Sync_Nav_WayBill - это синоним на таблицу на удаленном сервере
Если заменить его на сам объект через server.database.schema.table - бага нет.
29 окт 18, 17:13    [21718224]     Ответить | Цитировать Сообщить модератору
 Re: Баг во время JOIN  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1747
Гавриленко Сергей Алексеевич
Не видно всего, что скрывается за звездочкой. Мало ли там полей, похожих по написанию на WayBillDepartureName.
Если так?

В таблице со * всего 2 поля, поэтому и вывел *
29 окт 18, 17:14    [21718226]     Ответить | Цитировать Сообщить модератору
 Re: Баг во время JOIN  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1747
Выполнил
DBCC FREEPROCCACHE
DBCC FREESESSIONCACHE
DBCC FREESYSTEMCACHE ('ALL')
DBCC DROPCLEANBUFFERS

И баг пропал..
Надо было наверное по 1 запускать и смотреть что повлияло...
29 окт 18, 17:15    [21718229]     Ответить | Цитировать Сообщить модератору
 Re: Баг во время JOIN  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
WayBillDepartureName - какого типа?
Да и [Departure Name].

Может, там, всё-таки, LEFT JOIN, а не JOIN?
29 окт 18, 17:17    [21718231]     Ответить | Цитировать Сообщить модератору
 Re: Баг во время JOIN  [new]
wadegwadeg
Member

Откуда:
Сообщений: 36
Похоже на то, что Sync_Nav_WayBill - не синоним, а вьюха, определенная как select * from... - т.е. именно со звездочкой в select-list, а не со списком полей. Затем в исходной таблице происходит изменение списка полей, а с подобными вьюхами происходят спецэффекты.
Собственно, даже на sql.ru были какие-то образцовые примеры.
31 окт 18, 12:24    [21720143]     Ответить | Цитировать Сообщить модератору
 Re: Баг во время JOIN  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1747
wadegwadeg
Похоже на то, что Sync_Nav_WayBill - не синоним, а вьюха, определенная как select * from... - т.е. именно со звездочкой в select-list, а не со списком полей. Затем в исходной таблице происходит изменение списка полей, а с подобными вьюхами происходят спецэффекты.
Собственно, даже на sql.ru были какие-то образцовые примеры.

Не.. это синоним.. сам создавал..
Прикол в том что запрос выдавал + мусор
      SELECT
        snwb.No_,
        snwb.[Departure Name],
        wbd.*
      FROM
        Sync_Nav_WayBill AS snwb
        JOIN WayBillDeparture AS wbd
          ON wbd.WayBillDepartureName = snwb.[Departure Name]
      WHERE
        (snwb.Arch = 1) AND
        (snwb.[Starting Date] > @date_beg) AND
        (snwb.[Starting Date] < @date_end)
      ORDER BY
        snwb.No_

А запрос выдавал норм результат
      SELECT
        snwb.No_,
        snwb.[Departure Name],
       wbd.*
      FROM
        server.database.schema.table AS snwb
        JOIN WayBillDeparture AS wbd
          ON wbd.WayBillDepartureName = snwb.[Departure Name]
      WHERE
        (snwb.Arch = 1) AND
        (snwb.[Starting Date] > @date_beg) AND
        (snwb.[Starting Date] < @date_end)
      ORDER BY
        snwb.No_

При чем если в 1 запрос добавить любое условие фильтрации дополнительно, как запрос всегда выдавал верный результат.
Даже если просто прописать 1 = 1.
Сначала грешили на баг в криво посчитанном индексе. Ребилд индексов на удаленной таблице не помог.
Потом, после того как заменили синоним удаленным объектом, на который синоним ссылался и увидели верный результат, предположили что дело в кеше сервера, где выполняется запрос.
Сбросили весь кеш и все стало ОК.
Надеюсь такие фокусы пофиксили в последующих версиях и кумулятивах. Собираемся в этом году с 2014 переехать на 2017.
31 окт 18, 12:32    [21720170]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить