Автопроект 9.3 переход с MS SQL 2000 на MS SQL 2005/2008

Автор Furij, 17.07.12, 10:28:19

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Furij

Доброе утро!
Прошу помощи у специалистов. Недавно перешли с MS SQL 2000 server на 2005. Поставили совместимость с 2000 сервером и всё было хорошо, пока технологи не коснулись копирования из буфера. Вот уже который день бьёмся с этой проблемой.
Дело в том, что запросы все выполняются так же, но в 2005 сильно изменилась реализация триггеров. После долгих поисков нашли некоторые временные таблицы с кодом, который не может выполниться логически - исправили. Продвинулись дальше, но проблема не решалась. Поставили 2008 - "перевёл" структуру триггеров и VIEW более "дружелюбно".

Беру частный пример. Необходимо скопировать сборочные единицы одного заказа в другой.
1. Заходим в заказ откуда необходимо скопировать сб.ед.;
2. Выделяем сб. единицы Shift+стрелка вниз;
3. Нажимаем F5 - копирование в буфер. (2 строки);
4. Заходим в заказ куда необходимо добавить сб.ед.;
5. F6 - копировать из буфера. (2 строки).

Последовательность запросов в 2000

// 1. Запрос строк сб.ед. заказа откуда необходимо скопировать
SELECT IDELEN, ASSUNIT_ID, RES_ID, RESTYPE, TMP_SBR, FORMAT, ZONE, ZAKAZCHI, ZAKAZ, SHIFR, OBOZIZD, NAMEIZD, DATA, TEXNOLOG, SORTING, POS, STRCODE, NAME, AMOUNT, AMOUNTOB, VES, VESOB, CEX, CEXA, NOTE, POYASN FROM ASSEMBLYUNITS_KTC_VIEW_RES WHERE (ASSUNIT_ID) = (11644) ORDER BY SORTING, POS
// 2. Запрос всех заказов
SELECT ID, FORMAT, STRCODE, NAME, NOTE, POYASN, KODTEHN, N_ET, KOD_Z, ZAKAZCHI, ZAKAZ, SHIFR, SOSTAVL, DATA, RAZRAB, VES, VESZAK, CEXA, KOLIZD, FULLNAME, PRIZNAK_ZAKAZA, DATA_P, PODPISAL FROM PROJECTS WHERE ((FULLNAME) = ('Кошелева Е.В.')) OR (('ASU_2') = ('ECO-IT3XP')) ORDER BY DATA DESC
// 2. Запрос строк спецификации второго заказа
SELECT * FROM KEEP_PROC_SPECIFIC(11646) ORDER BY RESTYPE, GRIDPOS, POS, STRCODE
// 3. Запрос дерева спецификациии заказа второго заказа
select * from SBRTREE(11644)
// 4. Запрос строк сб.ед. заказа куда необходимо скопировать
SELECT IDELEN, ASSUNIT_ID, RES_ID, RESTYPE, TMP_SBR, FORMAT, ZONE, ZAKAZCHI, ZAKAZ, SHIFR, OBOZIZD, NAMEIZD, DATA, TEXNOLOG, SORTING, POS, STRCODE, NAME, AMOUNT, AMOUNTOB, VES, VESOB, CEX, CEXA, NOTE, POYASN FROM ASSEMBLYUNITS_KTC_VIEW_RES WHERE (ASSUNIT_ID) = (11644) ORDER BY SORTING, POS
// 5.
select user_name (uid), object_name (id), type, crdate from sysobjects where type in ('U', 'V', 'S') and id = object_id ('dbo.COMPOSIT') 
// 6.
select c.name, t.type, c.length, c.status, t.name, c.prec, c.scale from syscolumns c, systypes t where c.id = object_id ('dbo.COMPOSIT') and c.usertype = t.usertype order by colid ASC
// 7.
select x.name, x.indid, x.status, INDEX_COL('dbo.COMPOSIT', x.indid, c.colid) from sysindexes x, syscolumns c where x.id = object_id ('dbo.COMPOSIT') and indid between 1 and 254 and x.id = c.id  and c.colid <= x.keycnt order by x.indid, c.colid ASC
// 8.
select c.name, c.status, o.name from syscolumns c, sysobjects o where c.id = object_id ('dbo.COMPOSIT') and c.cdefault *= o.id order by colid ASC
// 9. Запрос ID первой строки, которую необходимо скопировать
select ID from COMPOSIT where ASSUNIT_ID=11644 and RES_ID=43963 and RESTYPE=3
// 10. Считает кол-во строк (результат 1)
select * from TESTINSERT(11644 ,43963)
// 11. Вставляет результат первой строки
INSERT INTO COMPOSIT (RES_ID,ASSUNIT_ID,RESTYPE,ZONE,POS,AMOUNT,VES,NOTE,POYASN,SORTING,AMOUNTOB,VESOB,CEXA) VALUES (43963,11644,3,NULL,1,2,41.16,NULL,' ',1.0,2,82.32,NULL)
// 12. Запрос ID второй строки, которую необходимо скопировать
select ID from COMPOSIT where ASSUNIT_ID=11644 and RES_ID=43964 and RESTYPE=3
// 13. Считает кол-во строк (результат 1)
select * from TESTINSERT(11644 ,43964)
// 14. Вставляет результат второй строки
INSERT INTO COMPOSIT (RES_ID,ASSUNIT_ID,RESTYPE,ZONE,POS,AMOUNT,VES,NOTE,POYASN,SORTING,AMOUNTOB,VESOB,CEXA) VALUES (43964,11644,3,NULL,2,2,11.379,NULL,' ',2.0,2,22.7584,NULL)
// 15. Обновление таблицы сб. единиц с конечным результатом
SELECT IDELEN, ASSUNIT_ID, RES_ID, RESTYPE, TMP_SBR, FORMAT, ZONE, ZAKAZCHI, ZAKAZ, SHIFR, OBOZIZD, NAMEIZD, DATA, TEXNOLOG, SORTING, POS, STRCODE, NAME, AMOUNT, AMOUNTOB, VES, VESOB, CEX, CEXA, NOTE, POYASN FROM ASSEMBLYUNITS_KTC_VIEW_RES WHERE (ASSUNIT_ID) = (11644) ORDER BY SORTING, POS

Что делают 5,6,7 и 8 запросы точно не знаю (могу скрин c результатами показать)
Последовательность запросов в 2005/2008 доходит до 10 запроса. При этом 5-ый не всегда выполняется, 6-7-8 - не выполняются, 9-ый выполняется с результатом - одно поле и ни одной строки, соответственно, 10-ый без результата.
Может быть кто сталкивался с такой проблемой или знает последовательность выполнения временных таблиц и триггеров во время копирования из буфера?
За ранее спасибо.

Furij

Не знаете алгоритм копирования в буфер автопроект?

Furij

Разобрался немного. Проблема в Функции TESTINSERT. В 2005\2008 MSSQL она работает не "адекватно". Пойду разбирать её на форумы SQL. Тема закрыта.