|
Перенос проводок из копии SQL | ☑ | ||
---|---|---|---|---|
0
Tateossian
10.10.14
✎
20:26
|
Всем привет! Весь вечер пятницы ломаю голову... Надо перенести проводки по БУ из архивной копии по определенной организации и определенным счетам (60, 62, 76). Использую написанный ниже запрос:
DECLARE @Account60 AS VARBINARY(16) DECLARE @Account76 AS VARBINARY(16) DECLARE @Account7601 AS VARBINARY(16) DECLARE @Account62 AS VARBINARY(16) DECLARE @Org AS VARBINARY(16) DECLARE P1 AS DATETIME2(3) SET P1 = '4014-06-30 23:59:59' -- Отбираем ссылки на счета SET @Account60 = 0x94D552749ABA3E8F42443FC86DDB4928 --Родительский счет 60 SET @Account76 = 0x9C19CBDA3DD23CC5415A39EACD87EB5B --Родительский счет 76 SET @Account7601 = 0x8B3F6908096CBB1A480EA8787025079F --Родительский счет 7601 SET @Account62 = 0xA9BEE74259B8A6A9471EBD2347509862 -- Родительский счет 62 SET @Org = 0x911AEE3A33F0F6BE4AC5D0F44F4481F9 --Организация IF EXISTS (select object_id('tempdb..#Acc')) DROP TABLE #Acc SELECT _IDRRef ,_Code INTO #Acc FROM [upp_07.10.2014].[dbo].[_Acc17] WITH (NOLOCK) WHERE _ParentIDRRef IN (@Account60, @Account76, @Account7601, @Account62) ORDER BY _Code DELETE SUB FROM upp_test.dbo._AccRgED22577 SUB INNER JOIN upp_test.dbo._AccRg22549 Provodki ON SUB._Period = Provodki._Period AND SUB._RecorderTRef = Provodki._RecorderTRef AND SUB._RecorderRRef = Provodki._RecorderRRef AND SUB._LineNo = Provodki._LineNo AND Provodki._Fld22550RRef = @Org AND ( Provodki._AccountCtRRef IN (SELECT _IDRref FROM #Acc) OR Provodki._AccountDtRRef IN (SELECT _IDRref FROM #Acc)) WHERE (SUB._Period <= P1) DELETE FROM upp_test.dbo._AccRg22549 WHERE _AccRg22549._Period <= P1 AND _AccRg22549._Fld22550RRef = @Org AND (_AccRg22549._AccountCtRRef IN (SELECT _IDRref FROM #Acc) OR _AccRg22549._AccountDtRRef IN (SELECT _IDRref FROM #Acc)) INSERT INTO upp_test.dbo._AccRgED22577 (SUB._Period ,SUB._RecorderTRef ,SUB._RecorderRRef ,SUB._LineNo ,SUB._Correspond ,SUB._KindRref ,SUB._Value_TYPE ,SUB._Value_RTRef ,SUB._Value_RRRef) SELECT SUB._Period ,SUB._RecorderTRef ,SUB._RecorderRRef ,SUB._LineNo ,SUB._Correspond ,SUB._KindRref ,SUB._Value_TYPE ,SUB._Value_RTRef ,SUB._Value_RRRef FROM [upp_07.10.2014].dbo._AccRgED22577 AS SUB INNER JOIN [upp_07.10.2014].dbo._AccRg22549 AS Provodki ON SUB._Period = Provodki._Period AND SUB._RecorderTRef = Provodki._RecorderTRef AND SUB._RecorderRRef = Provodki._RecorderRRef AND SUB._LineNo = Provodki._LineNo AND Provodki._Period <= P1 AND (Provodki._AccountDtRRef IN (SELECT _IDRref FROM #Acc) OR Provodki._AccountCtRRef IN (SELECT _IDRref FROM #Acc)) AND Provodki._Fld22550RRef = @Org INSERT INTO upp_test.dbo._AccRg22549 SELECT * FROM [upp_07.10.2014].dbo._AccRg22549 AS Provodki WHERE Provodki._Period <= P1 AND Provodki._Fld22550RRef = @Org AND (Provodki._AccountDtRRef IN (SELECT _IDRref FROM #Acc) OR Provodki._AccountCtRRef IN (SELECT _IDRref FROM #Acc)) При его выполнении выдается ошибка: Сообщение 2601, уровень 14, состояние 1, строка 50 Не удается вставить повторяющуюся строку ключа в объект "dbo._AccRgED22577" с уникальным индексом "_AccRg22577_ByPeriod_TRNRN". Повторяющееся значение ключа: (мар 26 4013 10:57AM, 0x000001ee, 0x8d0e0050568699bc11e295d54e071161, 5, 0x93e0bc525fc3dbe048d4a86fac901067, 0). Выполнение данной инструкции было прервано. Сообщение 2601, уровень 14, состояние 1, строка 81 Не удается вставить повторяющуюся строку ключа в объект "dbo._AccRg22549" с уникальным индексом "_AccRg22549_ByPeriod_TRN". Повторяющееся значение ключа: (мар 26 4013 10:57AM, 0x000001ee, 0x8d0e0050568699bc11e295d54e071161, 5). Выполнение данной инструкции было прервано. Как может быть нарушена уникальность, если я делаю внутреннее соединение РегистрБухгалтерии.Хозрасчетный с Субконто по всем полям индекса? Или у меня задвоение записей? А движения по Хозрасчетный я так вообще просто переношу. Или вот тут ошибка? AND (Provodki._AccountDtRRef IN (SELECT _IDRref FROM #Acc) OR Provodki._AccountCtRRef IN (SELECT _IDRref FROM #Acc)) |
|||
1
Ник второй
10.10.14
✎
20:29
|
(0) Зачем? Чем тебе конвертация не устроила?
|
|||
2
Ник второй
10.10.14
✎
20:30
|
Писать прямые запросы на 1С8 это расписаться в своей некомпитентности..... просто ужас...
|
|||
3
Tateossian
10.10.14
✎
20:30
|
(1) Тем, что она не подходит для данной задачи. Нужно перенести несколько миллионов проводок. Нафиг мне тут конвертация.
|
|||
4
Tateossian
10.10.14
✎
20:31
|
(2) Не неси пургу, батенька.
|
|||
5
Ник второй
10.10.14
✎
20:32
|
(3) ну дык несколько миллионов записей это немного. Зачем огород городить? Темболее скорость будет та же.
|
|||
6
Ник второй
10.10.14
✎
20:32
|
(4) Это аксиома.
|
|||
7
Tateossian
10.10.14
✎
20:32
|
(6) Я тоже это слышал. Уже не первый раз так делаю и скорость знаю. Короче, не умничай. Есть совет по делу?
|
|||
8
Ник второй
10.10.14
✎
20:34
|
(7) В том то и прикол, что я тоже был юн и горяч, пока осознание не пришло.
Несколько миллионов строк это 30-50 минут типовыми средствами переноса. |
|||
9
Tateossian
10.10.14
✎
20:35
|
(8) Долго. А результат не гарантирован.
|
|||
10
Tateossian
10.10.14
✎
20:36
|
Народ, почему делается инсерт с ошибкой, ведь, по сути, я просто накладываю условие на выборку, перед этим удалив все записи с таким же условием?
|
|||
11
Ник второй
10.10.14
✎
20:37
|
(9) Как раз в этом случае результат гарантирован.
|
|||
12
Tateossian
10.10.14
✎
20:37
|
Вот тут удалил:
DELETE FROM upp_test.dbo._AccRg22549 WHERE _AccRg22549._Period <= P1 AND _AccRg22549._Fld22550RRef = @Org AND (_AccRg22549._AccountCtRRef IN (SELECT _IDRref FROM #Acc) OR _AccRg22549._AccountDtRRef IN (SELECT _IDRref FROM #Acc)) А потом вставил: |
|||
13
Tateossian
10.10.14
✎
20:37
|
INSERT INTO upp_test.dbo._AccRg22549
SELECT * FROM [upp_07.10.2014].dbo._AccRg22549 AS Provodki WHERE Provodki._Period <= P1 AND Provodki._Fld22550RRef = @Org AND (Provodki._AccountDtRRef IN (SELECT _IDRref FROM #Acc) OR Provodki._AccountCtRRef IN (SELECT _IDRref FROM #Acc)) |
|||
14
Ник второй
10.10.14
✎
20:38
|
Так же
3. Незаконное распространение материалов, защищенных авторским правом, на форуме категорически запрещено! Не публикуйте материалы, нарушающие авторские права, а также ссылки на них. (к распространению приравниваются также просьбы "скинуть в почту" и подобные) 4. Не публикуйте алгоритмы взлома и ссылки на такие алгоритмы, а также всевозможные "патчи", "крэки", "эмуляторы", "серийные номера", "коды активации" и т.д. |
|||
15
Banned
10.10.14
✎
20:41
|
а просто селект перед вставкой сделать и проверить?
|
|||
16
Tateossian
10.10.14
✎
20:45
|
(15) Прикол в том, что я сделал отбор прям по ошибке...
И строка такая одна. https://yadi.sk/i/tBzGG8PKbvcWR |
|||
17
Tateossian
10.10.14
✎
20:48
|
... Уже не первый раз так переношу данные, но ошибка, связанная с индексами - впервые.
|
|||
18
ОчкарикСлава
10.10.14
✎
20:50
|
Не пятничной как то...
|
|||
19
Tateossian
10.10.14
✎
20:51
|
(18) Да какая разница, я работаю в режиме 12/7 - сейчас отчетный период.
|
|||
20
Banned
10.10.14
✎
20:51
|
(16) не пойду я на яндекс за картинкой
|
|||
21
Ник второй
10.10.14
✎
20:53
|
(17) Бугага
|
|||
22
Ник второй
10.10.14
✎
20:54
|
(19) Вот именно поэтому , что не профессионал и работаешь 12/7. Я в 18-00 пошел домой , а мог и раньше, но скучно.
|
|||
23
Tateossian
10.10.14
✎
20:56
|
(22) Мне твое мнение очень ценно.
А что если я скажу, что у меня бухгалтерия работает до поздна и по выходным и еще есть Владивосток, у которого тоже сбои бывают? |
|||
24
Ник второй
10.10.14
✎
20:59
|
(23) Я скажу что у меня 200 филиальных точек от македонии до владивостока и что то нет нужны сидеть ночью.
|
|||
25
Ник второй
10.10.14
✎
21:05
|
(24) И да обычно то что ты не успеваешь делать свою работу этим не хвастаются, а наоборот пытаются скрывать. Так что советую заняться работой а не велосипедостроительством.
|
|||
26
Tateossian
10.10.14
✎
21:08
|
(25) Ты такой флудильщик. Пусть второй раз забанят.
|
|||
27
Ник второй
10.10.14
✎
21:11
|
(26) Все слова по делу. А (0) противозаконно, да и просто бред.
|
|||
28
ОчкарикСлава
10.10.14
✎
21:38
|
(27) в целом да. Противозаконно точно. Да и нужды в таком подходе нету, если все правильно организовать.
|
|||
29
Tateossian
11.10.14
✎
00:50
|
INSERT INTO upp_test.dbo._AccRgED22577
(SUB._Period ,SUB._RecorderTRef ,SUB._RecorderRRef ,SUB._LineNo ,SUB._Correspond ,SUB._KindRref ,SUB._Value_TYPE ,SUB._Value_RTRef ,SUB._Value_RRRef) SELECT SUB._Period ,SUB._RecorderTRef ,SUB._RecorderRRef ,SUB._LineNo ,SUB._Correspond ,SUB._KindRref ,SUB._Value_TYPE ,SUB._Value_RTRef ,SUB._Value_RRRef FROM [upp_07.10.2014].dbo._AccRgED22577 AS SUB INNER JOIN #IDX AS IDX ON SUB._Period = IDX._Period AND SUB._RecorderTRef = IDX._RecorderTRef AND SUB._RecorderRRef = IDX._RecorderRRef AND SUB._LineNo = IDX._LineNo INSERT INTO upp_test.dbo._AccRg22549 (Provodki._Period ,Provodki._RecorderTRef ,Provodki._RecorderRRef ,Provodki._LineNo ,Provodki._Active ,Provodki._AccountDtRRef ,Provodki._AccountCtRRef ,Provodki._Fld22550RRef ,Provodki._Fld22551DtRRef ,Provodki._Fld22551CtRRef ,Provodki._Fld22552 ,Provodki._Fld22553Dt ,Provodki._Fld22553Ct ,Provodki._Fld22554Dt ,Provodki._Fld22554Ct ,Provodki._Fld22555 ,Provodki._Fld22556 ,Provodki._Fld22557 ,Provodki._Fld22558 ,Provodki._Fld22559RRef ,Provodki._Fld22560) SELECT Provodki._Period ,Provodki._RecorderTRef ,Provodki._RecorderRRef ,Provodki._LineNo ,Provodki._Active ,Provodki._AccountDtRRef ,Provodki._AccountCtRRef ,Provodki._Fld22550RRef ,Provodki._Fld22551DtRRef ,Provodki._Fld22551CtRRef ,Provodki._Fld22552 ,Provodki._Fld22553Dt ,Provodki._Fld22553Ct ,Provodki._Fld22554Dt ,Provodki._Fld22554Ct ,Provodki._Fld22555 ,Provodki._Fld22556 ,Provodki._Fld22557 ,Provodki._Fld22558 ,Provodki._Fld22559RRef ,Provodki._Fld22560 FROM [upp_07.10.2014].dbo._AccRg22549 AS Provodki INNER JOIN #IDX AS IDX ON Provodki._Period = IDX._Period AND Provodki._RecorderTRef = IDX._RecorderTRef AND Provodki._RecorderRRef = IDX._RecorderRRef AND Provodki._LineNo = IDX._LineNo При использовании конструкции OR строка обрабатывалась дважды при команде INSERT. |
|||
30
Tateossian
11.10.14
✎
00:51
|
(29) Первую половину не скопипастил...
Вот что получилось в итоге: DECLARE @Account60 AS VARBINARY(16) DECLARE @Account76 AS VARBINARY(16) DECLARE @Account7601 AS VARBINARY(16) DECLARE @Account62 AS VARBINARY(16) DECLARE @Org AS VARBINARY(16) DECLARE P1 AS DATETIME2(3) SET P1 = '4014-06-30 23:59:59' SET @Account60 = 0x94D552749ABA3E8F42443FC86DDB4928 --Родительский счет 60 SET @Account76 = 0x9C19CBDA3DD23CC5415A39EACD87EB5B --Родительский счет 76 SET @Account7601 = 0x8B3F6908096CBB1A480EA8787025079F --Родительский счет 7601 SET @Account62 = 0xA9BEE74259B8A6A9471EBD2347509862 -- Родительский счет 62 SET @Org = 0x911AEE3A33F0F6BE4AC5D0F44F4481F9 --Организация АА IF EXISTS (select object_id('tempdb..#Acc')) DROP TABLE #Acc IF EXISTS (select object_id('tempdb..#IDX')) DROP TABLE #IDX SELECT _IDRRef ,_Code INTO #Acc FROM [upp_07.10.2014].[dbo].[_Acc17] WITH (NOLOCK) WHERE _ParentIDRRef IN (@Account60, @Account76, @Account7601, @Account62) ORDER BY _Code SELECT Provodki._Period ,Provodki._RecorderTRef ,Provodki._RecorderRRef ,Provodki._LineNo INTO #IDX FROM [upp_07.10.2014].dbo._AccRg22549 Provodki WHERE Provodki._Period <= P1 AND Provodki._Fld22550RRef = @Org AND Provodki._AccountCtRRef IN (SELECT _IDRref FROM #Acc) UNION SELECT Provodki._Period ,Provodki._RecorderTRef ,Provodki._RecorderRRef ,Provodki._LineNo FROM [upp_07.10.2014].dbo._AccRg22549 Provodki WHERE Provodki._Period <= P1 AND Provodki._Fld22550RRef = @Org AND Provodki._AccountDtRRef IN (SELECT _IDRref FROM #Acc) DELETE SUB FROM upp_test.dbo._AccRgED22577 SUB INNER JOIN #IDX IDX ON SUB._Period = IDX._Period AND SUB._RecorderTRef = IDX._RecorderTRef AND SUB._RecorderRRef = IDX._RecorderRRef AND SUB._LineNo = IDX._LineNo DELETE Provodki FROM upp_test.dbo._AccRg22549 Provodki INNER JOIN #IDX IDX ON Provodki._Period = IDX._Period AND Provodki._RecorderTRef = IDX._RecorderTRef AND Provodki._RecorderRRef = IDX._RecorderRRef AND Provodki._LineNo = IDX._LineNo INSERT INTO upp_test.dbo._AccRgED22577 (SUB._Period ,SUB._RecorderTRef ,SUB._RecorderRRef ,SUB._LineNo ,SUB._Correspond ,SUB._KindRref ,SUB._Value_TYPE ,SUB._Value_RTRef ,SUB._Value_RRRef) SELECT SUB._Period ,SUB._RecorderTRef ,SUB._RecorderRRef ,SUB._LineNo ,SUB._Correspond ,SUB._KindRref ,SUB._Value_TYPE ,SUB._Value_RTRef ,SUB._Value_RRRef FROM [upp_07.10.2014].dbo._AccRgED22577 AS SUB INNER JOIN #IDX AS IDX ON SUB._Period = IDX._Period AND SUB._RecorderTRef = IDX._RecorderTRef AND SUB._RecorderRRef = IDX._RecorderRRef AND SUB._LineNo = IDX._LineNo INSERT INTO upp_test.dbo._AccRg22549 (Provodki._Period ,Provodki._RecorderTRef ,Provodki._RecorderRRef ,Provodki._LineNo ,Provodki._Active ,Provodki._AccountDtRRef ,Provodki._AccountCtRRef ,Provodki._Fld22550RRef ,Provodki._Fld22551DtRRef ,Provodki._Fld22551CtRRef ,Provodki._Fld22552 ,Provodki._Fld22553Dt ,Provodki._Fld22553Ct ,Provodki._Fld22554Dt ,Provodki._Fld22554Ct ,Provodki._Fld22555 ,Provodki._Fld22556 ,Provodki._Fld22557 ,Provodki._Fld22558 ,Provodki._Fld22559RRef ,Provodki._Fld22560) SELECT Provodki._Period ,Provodki._RecorderTRef ,Provodki._RecorderRRef ,Provodki._LineNo ,Provodki._Active ,Provodki._AccountDtRRef ,Provodki._AccountCtRRef ,Provodki._Fld22550RRef ,Provodki._Fld22551DtRRef ,Provodki._Fld22551CtRRef ,Provodki._Fld22552 ,Provodki._Fld22553Dt ,Provodki._Fld22553Ct ,Provodki._Fld22554Dt ,Provodki._Fld22554Ct ,Provodki._Fld22555 ,Provodki._Fld22556 ,Provodki._Fld22557 ,Provodki._Fld22558 ,Provodki._Fld22559RRef ,Provodki._Fld22560 FROM [upp_07.10.2014].dbo._AccRg22549 AS Provodki INNER JOIN #IDX AS IDX ON Provodki._Period = IDX._Period AND Provodki._RecorderTRef = IDX._RecorderTRef AND Provodki._RecorderRRef = IDX._RecorderRRef AND Provodki._LineNo = IDX._LineNo |
|||
31
Сияющий Асинхраль
11.10.14
✎
00:58
|
(30) Так и хочется сказать "Героям слава" :-)... Ой, но это, кажется, из другой оперы :-)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |