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

Откуда:
Сообщений: 397
Доброго времени суток
подскажите пожалуйста:
есть запрос:
select 
       c.CloseDate as [Дата время]
      ,cl.id_tov_cl as [ИД товар] 
      ,cl.Quantity as [кол-во]
      ,cl.BasePrice as [цена по которой купил]
      ,cl.Price_retail as [цена реальная]
      ,c.ShopNo as [номер магазина]
      ,c.CashID as [номер кассы]
      ,c.CashCheckNo as [Номер чек]   
      ,cl.CashCheckLineNo as [Позиция в чеке]
from SMS_UNION..Checks (nolock) c
join SMS_UNION..CheckLine (nolock) cl on cl.CheckUID = c.CheckUID
where c.OperationType = 1 and c.CloseDate >= DATEADD(MONTH,-1,'20181122') and c.CloseDate < '20181122'


Если выполнить COUNT(*) выходит 62 522 447 кол-во записей
Но если выгрузить через мастер, то отчет показывает, что выгружено 62 525 305 строк
при этом повторений не может быть в строках (на всякий случай)

разделитель при выгрузке '|', в полях выборки нет символов перевода корретки и "|"

Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64) Aug 19 2014 12:21:34 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
22 ноя 18, 10:20    [21740880]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
iiyama
Member

Откуда:
Сообщений: 642
Sandist,
Есть возможность при выгрузке сделать пк или сгенерить row_number, а потом залить из полученного файла в табличку обратно и найти дубли?
22 ноя 18, 11:04    [21740932]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
Sandist
Member

Откуда:
Сообщений: 397
iiyama,
дубли убрать не проблема

мне интересно, знает кто-нибудь почему такое происходит?
может кто сталкивался
22 ноя 18, 11:07    [21740937]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
iiyama
Member

Откуда:
Сообщений: 642
Sandist,

Не понял, зачем их убирать?
Вам же нужно разобраться что не так, а для этого надо найти что не так.
Может Вы банально грязные данные читаете, а потом их транзакция откатывает, кто ж знает
22 ноя 18, 12:09    [21741072]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
Sandist
Member

Откуда:
Сообщений: 397
iiyama,
вряд ли конечно, но это я проверю, спасибо (не подумал про это)
а еще есть варианты?
22 ноя 18, 12:12    [21741082]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
У меня мысль - возможно глупая:
c.CloseDate < '20181122'

Разное преобразование типов дат (левая часть преобразуется в Date или правая в datetime)
22 ноя 18, 12:53    [21741176]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
Sandist
Member

Откуда:
Сообщений: 397
Kopelly,
в любом случае времени это им не добавляет
а closedate сам datetime
22 ноя 18, 13:12    [21741215]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
Sandist,

между А и Б появляются новые записи в таблицах.
22 ноя 18, 13:29    [21741261]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
Sandist
Member

Откуда:
Сообщений: 397
Владислав Колосов,

исключено, данные за предыдущие периоды не добавляются
на всякий перепроверил, сделал count(*) значение то же
22 ноя 18, 14:17    [21741345]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
iiyama
Member

Откуда:
Сообщений: 642
Sandist,
Прям заинтриговали.
Выгрузите данные в табличку.
Из таблички пакетом в файл.
Из файла обратно в другую табличку
Найти разницу.
Опубликовать шокирующие подробности в этой ветке. (Таблицы идентичны/Не идентичны/ Вот такая разница)

Делов меньше чем на полчаса на 62 млн строках
22 ноя 18, 14:35    [21741383]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
Sandist
Member

Откуда:
Сообщений: 397
iiyama,
так и сделаю
в общем разберусь и отпишусь
22 ноя 18, 16:07    [21741591]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30711
Sandist
Если выполнить COUNT(*) выходит 62 522 447 кол-во записей
Но если выгрузить через мастер, то отчет показывает, что выгружено 62 525 305 строк
Либо для выгрузки и COUNT(*) используются зарные запросы, либо действительно между операциями происходит изменение количества записей.

Ещё может быть вариант, вы неправильно считаете количество выгруженных строк.

Ну и традиционно - запросы выполняются на разных серверах/БД :-)
Sandist
при этом повторений не может быть в строках (на всякий случай)
Какая разница, в обоих случаях повторения не влияют на результат.
22 ноя 18, 17:23    [21741717]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
Sandist
Member

Откуда:
Сообщений: 397
alexeyvg,

alexeyvg
Либо для выгрузки и COUNT(*) используются зарные запросы, либо действительно между операциями происходит изменение количества записей

Нет, запросы те же самые, изменения не происходят (проверил)
alexeyvg
Ещё может быть вариант, вы неправильно считаете количество выгруженных строк.

Масте дает отчет и я сужу по кол-ву выгруженных строк, кроме того после загрузки выполнили count(*) уже на др машине и там count соответсвует кол-ву выгрузки о которой говорил мастер
alexeyvg
Ну и традиционно - запросы выполняются на разных серверах/БД :-)

))
22 ноя 18, 22:58    [21742187]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
Sandist
Member

Откуда:
Сообщений: 397
не стал смотреть какие именно чеки "лишние", так что не знаю конкретно что отличается
но сделал 2 вещи, выгрузил все чеки во временную таблицу и затем в файл - тут уже кол-во совпало
затем решил убрать (nolock) и выгрузить из основных таблиц и так же результат совпал
я сделал вывод, что мастеру не понравился nolock, хотя, хочу повторить, задним числом данные не меняются и мой count(*) совпал с тем, что я выполнял сегодня днем

Если кто знает почему так может быть я рад буду услышать, но в целом решил проблему так
22 ноя 18, 23:32    [21742201]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30711
Sandist
я сделал вывод, что мастеру не понравился nolock, хотя, хочу повторить, задним числом данные не меняются и мой count(*) совпал с тем, что я выполнял сегодня днем

Если кто знает почему так может быть я рад буду услышать, но в целом решил проблему так
Как ему может не понравиться nolock :-)

Очевидно, данные меняются во время выгрузки. Может, и неявно (например, происходит расщепление страниц при вставке или изменении данных за другие даты).
23 ноя 18, 09:38    [21742383]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
Sandist
Member

Откуда:
Сообщений: 397
alexeyvg,
видимо так и есть, надо покурить nolock тщательнее

всем огромное спасибо что уделили время
23 ноя 18, 10:37    [21742474]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных через Мастер импорта и экспорта  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1663
Sandist
не стал смотреть какие именно чеки "лишние", так что не знаю конкретно что отличается
но сделал 2 вещи, выгрузил все чеки во временную таблицу и затем в файл - тут уже кол-во совпало
затем решил убрать (nolock) и выгрузить из основных таблиц и так же результат совпал
я сделал вывод, что мастеру не понравился nolock, хотя, хочу повторить, задним числом данные не меняются и мой count(*) совпал с тем, что я выполнял сегодня днем

Если кто знает почему так может быть я рад буду услышать, но в целом решил проблему так


Nolock чем хорош - можно не ожидать снятия с таблицы блокировок, наложенных другими транзакциями.
А чем плох - читает также "грязные данные". В общем - читаем [url=]https://docs.microsoft.com/ru-ru/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-2017[/url]
[url=]https://docs.microsoft.com/ru-ru/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-2017[/url]
24 ноя 18, 23:29    [21743913]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить