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

Откуда:
Сообщений: 12
Есть каталог товаров на сайте. Есть учетная программа 1С. Все в одной локальное сети, 1С и сайт используют MS SQL.
Нужно из 1С обновить каталог товаров на сайте (наименования товара и прочую информацию).

Если делать update по 1 записи, то будет очень долго.
Возможно ли как то сделать быстрее? Или алгоритм такой загрузки?

Вопрос еще такой, а если товар ранее не выгружался? Нужно сначала делать select, а уже потом update или insert? Есть ли способ быстрее?
9 окт 16, 01:46    [19760052]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро изменить/обновить много записей?  [new]
iljy
Member

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

по вашим вопросам видно, что с серверами БД и с SQL дела вы не имели никогда. Возможно, будет гораздо проще найти грамотного человека, который вам все сделает (форум Работа). Если же все-таки хотите разобраться сами, то вот информация к размышлению:

1. Единственный запрос UPDATE может изменять произвольное количество записей, и ни с SELECT, ни с INSERT он никак не связан.
2. Существует куча способов загрузки внешних данных в промежуточные (временные) таблицы (BULK INSERT, XmlBulkLoad и т.д.), которые можно затем использовать для массового обновления данных в основной БД (см. в MSDN полный синтаксис UPDATE либо MERGE).
3. Скорость выполнения UPDATE зависит от объема данных, существующих индексов, но никак не зависит от того, читались данные ранее или нет.
9 окт 16, 02:07    [19760060]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро изменить/обновить много записей?  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
AstX
Если делать update по 1 записи, то будет очень долго.

Так работает 1С.
В самых последних версиях 1С используется синтаксис MS SQL 2000 т.е. что-то очень простое.
Команды UPDATE в 1С нет, там механизм работы напоминает курсоры. Поэтом всегда всё будет медленно работать. Если нужно быстро, то через ADO.

Структура таблиц в 1С
+

_ID<suff> - идентификатор узла;
_Version - версия записи (изменяется после каждого обновления данной записи);
_Marked - признак того, что узел помечен на удаление;
_Code - код узла;
_Description - наименование узла;
_SentNo - номер последнего отправленного сообщения обмена данными в адрес этого узла;
_ReceivedNo - номер последнего сообщения обмена данными, полученного от этого узла;
_Fld<n><suff> - реквизит плана обмена (для каждого реквизита, определенного в конфигурации);
_PredefinedID - ccылка на предопределенное в метаданных значение;
_Fld<n> - общие реквизиты

Структура и название таблиц использыемых для хранения данных в БД 1С 8.х

Работа с ADO в среде 1С (найдете в интернете) - это если напишете свою процедуру и будет запускать её из 1С.
14482087

Поле (которое есть в каждой таблице)
_Version - версия записи (изменяется после каждого обновления данной записи) с типом timestamp.

На форуме по MS SQL вы можете спросить как работать с полем, у которого тип timestamp.
9 окт 16, 15:38    [19760662]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро изменить/обновить много записей?  [new]
Денис Ч
Member

Откуда:
Сообщений: 3138
trew
Так работает 1С.


Она работает не просто так.
1. выполняются объектные проверки и вычисления
2. Обеспечивается совместимость на уровне всех поддерживаемых движков БД.

Согласен, криво. Но.

автор
Нужно из 1С обновить каталог товаров на сайте


Используй MERGE
10 окт 16, 09:51    [19762591]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить