[ASP.NET] Аналог курсора?
Можно открыть второе соединение. Или я туплю?
Оно будет в другой транзакции, что не есть ГУД
правда, это требует установленного и запущенного DTS на сервере. DTS — Distributed Transaction Service или как-то так.
выдернуть dataTable из базы
обновить datatable или создать новый datatable
залить обновленный datatable в базу
работать это будет на порядок быстрее, чем весь геморой с одиночными insert/update-ами
если очень надо что-то делать на веб сервере и БД sql сервер, то можно сделать как сказал, только средствами sql сервера подключить вторую сессию к транзакции первой сессии — в принципе могу в BOL найти как такое делается, не помню уже
правильное поведение:выдернуть dataTable из базыобновить datatable или создать новый datatableзалить обновленный datatable в базуработать это будет на порядок быстрее, чем весь геморой с одиночными insert/update-ами+1, меньше юлокировок, маштабируемость будет лучше
только не совсем понятно, как формируется таблица с новыми событиями
а зачем данные вообще забирать через датаридер, разве нельзя на сервере две команды выполнить: INSERT SELECT и UPDATE?
Я слишком упростил, чего я делаю. Поскольку вопрос вылез за наивное "как тут называется курсив", сформулирую, что мне на самом деле нужно (тоже упрощенно, но постараюсь ничего не упустить . У меня есть таблица "Клиенты" (идентификатор, имя, телефон, что любит: мороженое, пироженое или рыбий жыр есть таблица "Продукция" (наименование, цена, тип: мороженое, пироженое, рыбий жир). Я хочу формировать список адресной рекламы, каких клиентов мне надо оповестить о каких товарах. Любители мороженого должны узнать обо всех имеющихся сортах мороженого, любители пироженых — обо всех пироженых. Этот список рассылки я хочу хранить (чтоб отслеживать выполнение ну и пополнять (по мере прихода нового товара). Сейчас меня интересует как из данного набора клиентов и набора товаров соорудить список рассылки.
Я бы сделал "SELECT * FROM Клиенты, Товары WHERE Клиент.любит=Товар.имеет_тип". Но тогда получается, что одному иванову я должен позвонить 30 раз (по числу сортов мороженого а всего записей нагенирируется порядка 12 тысяч. Это не дело.
То, что об одной и той же лакомке я должен сообщить 30 раз: по разу Иванову, Петрову и прочим, это факт объективной реальности.
Поэтому я считаю, что есть сущность "Телефонные звонки", которая относится к "Товары" как много ко многим. Есть таблица, реализующая эту связь. Скажем "ТоварыЗвонки".
Теперь вопрос. Как мне так исхитрится, чтобы заполнить таблицы "телефонные звонки" "товарыЗвонки"?
Если у меня в базе есть две таблицы, связанные ключом, а еще есть аналогичные по структуре два datatable. Эти тейблы содержат то, что я хотел бы добавть в базу. Только с первичными ключами накладочка — они ж автоинкрементом генерятся. Так вот, как мне эти тейблы в базу залить?
Или я идеологию не секу?
Спасибо
Только с первичными ключами накладочка — они ж автоинкрементом генерятся.именно поэтому, плохим тоном считается - создание автоинкрементных ключей.
Теперь вопрос. Как мне так исхитрится, чтобы заполнить таблицы "телефонные звонки" "товарыЗвонки"?какое кол-во записей в таблицах?
объясни, плиз, следующие непонятные мне моменты:
1) как на это накладывается ось время (где и как записано, что о таких-то новинках мы уже сообщили данному клиенту)?
2) и как накладывается адресность - т.е. понимание того, о каких товарах мы должны сообщить в данный конкретный звонок?
Есть таблица "Тел. звонки". У каждой записи есть статус: к испонению либо выполнено (ну либо еще что). К каждой записи привязано (таблицей ЗвонкиТовары а каких товарах мы сообщали (собираемся сообщить). Дальше, девочка-оператор садится и пишет запрос на все звонки, у которых статус "к исполнению". И для каждого такого звонка она может получить список товаров, о которых она должна сообщить.
Это все относится к логике пользования тех данных, которые я сейчас хочу научится генерировать.
Если вопрос в том, какие привязки клиентов к товарам следует сгенерировать в данный момент, то я мыслю так: садится босс этой девушки-оператора и генерирует привязки для всех клиентов ко всем товарам, пришедшим за последнюю неделю, например.
Товаров порядка 150, клиентов порядка 1000, правило определения подходящести товара клиенту на самом деле довольно извращнное.
Оставить комментарий
Realist
Пусть у меня есть селект, который возвращает набор новых событий. Скажем: дата, тип события. Есть таблица "зарегестрированные события": дата, тип, число раз. Так вот, для каждого нового события я хочу следующее: если оно уже есть (то есть в таблице "зарегестрированные события" есть запись с такой же датой и таким же типом увеличить на единичку счетчик (поле "число раз"). Если его нет, то зарегестрировать это событие (создать новую запись в "зарегестрированные события").Я расчитывал сделать так: по селекту создать DataReader. В цикле чтения из этого DataReader производить insert или update. Беда в том, что я не могу использовать соединение к БД (и как следствие, транзакцию пока у меня не закрыт DataReader. Неужели я должен все данные, которые мне возвращает Select, откопировать в массив какой-нить, а потом работать уже с массивом.
Что делать? Я понятно написал?
Спасибо.