powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Перенос данных посредством SQL
16 сообщений из 16, страница 1 из 1
Перенос данных посредством SQL
    #37526622
При записи в таблицу выдается сообщение:

Cannot insert duplicate key row in object 'SC41' with unique index 'IDD'.

Понятно, что дело в уникальности значений индексов, и система не дает создать новую запись в таблице со значением индекса, которое уже есть. Вопрос следующий: как обходить это ограничение? Имеется в виду, что обходить автоматически, а не лезть в QA каждый раз, когда такое сообщение выплевывается, с последующим поиском соответствующих строк, которые не записались.
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37526638
Никто не знает?
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37526684
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Злобный ЙожегНикто не знает? а вы форумом не ошиблись?
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37526740
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тут два варианта:

1. саморучно завалить базу, чего уж там....
2. произвести тестирование и исправление.
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37526762
Panshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
судя по имени таблицы это 1с77. просто снесите индекс drop index sc41 ... Думаю, 1с77 сама все перестроит. Если не перестроит, то надо смотреть какие поля задействованы в построении индекса, и понять откуда берется одинаковость индекса в записи. Может быть поле code формируется не так или достигло своего последнего значения.
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37526789
Panshin,

Да, это 7.7. Проблему временно удалось решить, установив соединение в запросе, который добавляет записи, таблицы записей из источника с таблицей справочника базы-приемника по ID с условием, что запись в справочнике-приемнике IS NULL. Я так понял, он туда лезет записывать всякий раз, когда обрабатывает справочник, имеющий в своих реквизитах ссылку на тот, на котором выскакивала такая ошибка.

Теперь вопрос в следующем: данные у меня переносятся, как вы наверно догадались, из одной базы в другую, идентичную. В процессе переноса встречаются строки неограниченной длины, у которых тип прописан как MEMO. Данные базы-источника я собираю в ТЗ, которую потом сливаю в ВТ, и уже из этой ВТ заполняю таблицу справочника базы-приемника. При заполнении таких полей он мне выдает ошибку: "Усечение данных строки справа". Как с этим справиться?
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37526790
sWinTyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точно сносите индекс
и кластерный и обычный
ломай ее ... ломай заразу

бэк ап есть?
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37526807
sWinTyzточно сносите индекс
и кластерный и обычный
ломай ее ... ломай заразу

бэк ап есть?

Естессно. База вообще тестовая. Но, повторюсь, сейчас не это главная проблема.
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37526831
Panshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Злобный Йожег,
Если пользуетесь штатным импортом / экспортом то никак. Используйте bcp.
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37526860
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Найдите дубли, вполне возможно что проблема с DBF файлом.
В отдельную баз просто затащите данные, безо всяких индексов и ключей.
Запросом - типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Select
         A2.*, s.*
From
     SC41 s 
inner join 

        (Select 
             ID, Count(*) As A1
         From 
                SC41  
         Group by 
                ID
        Having 
                Count(*) > 1 
) 
As A2 on s.ID = a2.ID

Найдете как раз все дубли.
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37527266
Кто скажет, почему не выполняется запрос вида "INSERT INTO SC84(SP95, SP101) VALUES ('1', '1')"?

SP95, SP101 - поля типа "строка неогр. длины".
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37527371
tvm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, поля типа "строка неогр. длины" в отдельной таблице хранятся. в дбф это 1SBLOB в скуле нет возможности посмотреть
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37527646
Я так понимаю, что ошибка выскакивает на MS SQL Server. Скорее всего поле IDD на таблице SC41 имеет тип Identity, т.е. автоинкремент. Это ограничение можно обойти, если перед sql запросом сначала выполнить
Код: plaintext
set identity_insert SC41 ON
и в конце нужно выключить эту опцию командой
Код: plaintext
set identity_insert SC41 OFF

В скрипте вставки записей, например, можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SET IDENTITY_INSERT SC41 ON
GO

Insert into SC41(...)
VALUES (...)
GO

SET IDENTITY_INSERT SC41 OFF
GO

Эта опция отключает запрет на вставку значений в поле с типом identity
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37527803
Demigod the SatanEye,

Спасибо, будем иметь в виду.

Всё же, подчеркиваю, более живым является сейчас вопрос о записи данных в реквизиты типа строка неограниченной длины. В 7.7 в файловой версии они действительно лежат в таблице 1SBLOB, в скулевой, как я понял - непосредственно в таблицах справочников. Если нельзя запросом туда внести значение, то как иначе можно это сделать? Дело здесь осложняется еще тем, что данные переносятся между двумя базами. Подключаться к базе-приемнику по ОЛЕ для перезаписи элементов справочников с заполнением таких полей - не вариант, ибо слишком неудобно.
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37527829
tvm,

В скуле они хранятся вместе с другими полями в таблице справочника. При обычном просмотре таблицы значения этих полей не увидишь, а вот запросом все прекрасно читается. Но раз читается, значит, как-то и записывается?! Вопрос: как именно?
...
Рейтинг: 0 / 0
Перенос данных посредством SQL
    #37532773
в SQL Server скорее всего используется тип TEXT, nTEXT или image. Для записи в такие поля используются функции WRITETEXT и SETTEXT. Подробнее можно почитать в MSDN тут

Пример, как можно писать в поле типа очень длинная строка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
DECLARE @ptrval binary( 16 ); -- Объявляем переменную-указатель на строку неогр. длины

SELECT @ptrval = TEXTPTR(SP95) 
FROM SC41 S
WHERE S.IDD =  16  -- выбираем данные в указатель из поля неогр. длины из нашей таблицы где IDD = 16 (например)

WRITETEXT SC41.SP95 @ptrval 'Новая очень-очень длинная строка данных';
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Перенос данных посредством SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]