![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Itsys |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Есть следующий кусок кода:
Перед выполнение кода таблица SuppliersFileRows очищается DELET-ОМ Проблема следующая: при отрабатывании скрипта 1. добавляется по две строки на каждый INSERT 2. при проверки COUNT(*) начало каждый раз разное на одном и том же файле пример логов: Лог №1
Лог №2:
Сколько раз выполняешь скрипт, столько вариантов значения COUNT(*) - 1, 20, 3, 9 Это сообщение отредактировал(а) Itsys - 20.2.2008, 17:40 |
||||||
|
|||||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый Itsys, сделайте запрос к БД
Результаты в студию! Это сообщение отредактировал(а) ginnie - 20.2.2008, 18:54 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
SELECT * FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1 ORDER BY RowNumber ASC
![]()
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Если $SQLFastbook не DBI, то, возможно, собака зарыта в функции do().
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
DBI
![]() Добавлено через 2 минуты и 26 секунд Самое главное, что в базе еще дофига других таблиц и все работает нормально Добавлено через 3 минуты и 21 секунду Подключение к MS SQL через ODBC драйвер |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Тогда включите лог в DBI и смотрите, почему у Вас записи по два раза вставляются.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Попробую....
|
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Лог DBI в студию:
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Itsys, попробуйте вставить строку в таблицу из SQL-менеджера, может у Вас там триггер на вставку отрабатывает? В логе я ничего странного не увидел.
Кроме этого
надо делать вне цикла, а внутри цикла только execute() - это для повышения производительности ![]() Это сообщение отредактировал(а) ginnie - 21.2.2008, 12:18 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Пробовал... при запросе из Query Analyzer - добавляется одна строка.
При трассировке показывает, что проходит как-бы 2 запроса друг за дружкой, причем все запросы по 2 шт. - на удаление данных из таблицы и на добавление данных в таблицу, причем это касается только этой таблицы! До указанного кода выполняется следующий запрос (посылается одним методом do):
Так вот, трейсер показывает, что первая строка запроса (DELETE FROM SuppliersFileColumns WHERE SupplierId = 34 AND GoodType = 1) выполняется 1 раз, а все остальные строки запроса выполняются по 2 раза, и дальше, все запросы выполняются по 2 раза. Добавлено через 7 минут и 18 секунд Убрал DELETE FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1 из того запроса в отдельный ![]() Первый запрос все строки отрабатываются по одной, но после прохождения этого запроса все остальные строки по добавлению строк в таблицу SuppliersFileRows доблируются, так же дублируются запросы SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1 ![]() |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Трейсер показывает, что запросы (задвоенные) выполняются на разных SPID, т.е. по одному запросу допустим на SPID 55 и еще по одному запросу на SPID 52 - поэтому и задваивается все.
Два DELETE вполняются тоже на тех же SPID, только раньше, чем процесс вставки - поэтому сначала один SPID очищает таблицу, потом другой очищает уже очищенную таблицу и затем кажды SPID всталяют по 4 строки. Сам то понял, чего написал? ![]() |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Трейсер показал, что сначала выполняются все 4 запроса на добавление записей и последний запрос UPDATE Suppliers SET FileLoadState = 1 WHERE SupplierId = 34, а потом они же и последний запрос на другом SPID
|
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Люди хелп!!!! Время идет а проект стоит
![]() ![]() ![]() Уже всю голову сломал - и переименовывал таблицу - все тоже самое ![]() Может это глюк ODBC? Может кто знает как посмотреть что проиходит в ODBC - что он получает, что отправляет на сервер? Есть ли какой-нибудь трейсер для ODBC |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Itsys, похоже глюк либо в ODBC (менее вероятно), либо в драйвере для SQL Servera. Если платформа Windows, попробуй сначала поставить последний MDAC.
P.S. в Windows в ODBC, как мне кажется, можно лог в файл включить. Это сообщение отредактировал(а) ginnie - 22.2.2008, 17:26 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Стандартный трейсер ODBC ничего в логе не отображает - лог вообще пустой
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |