SQL Server, преобразовывая NTEXT в NVARCHAR (МАКС)

В зависимости от того, что вы подразумеваете под «прервать»:

Вы можете использовать <xsl:message> примерно так:

<xsl:if test="HeaderInformation/InvoiceType='CreditNote'">
    <xsl:message terminate="yes"/>
</xsl:if>

Это закончится с ошибкой.

Если вы просто не хотите ошибки, вы также можете сделать что-то вроде этого:

<xsl:template match="/">
    <xsl:if test="SALESINVOICE[not(Interchange/HeaderInformation/InvoiceType='CreditNote')]">
        <!-- Here goes your XSLT code -->
        <xsl:apply-templates/>
    </xsl:if>
</xsl:template>

Это выведет пустой документ, если будет найдено <InvoiceType> со значением CreditNote.

10
задан Robin Day 28 January 2009 в 13:55
поделиться

5 ответов

Если Вы не можете получить запланированное время простоя....

создайте два новых столбца: nvarchar (макс.) processedflag ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ INT 0

Создайте некластеризованный индекс на processedflag

Вы имеете, ОБНОВЛЯЮТ TOP, доступный Вам (Вы хотите обновить вершину, заказанную первичным ключом).

Просто установите processedflag на 1 во время обновления так, чтобы следующее обновление только обновило, где обработанный флаг все еще 0

Можно использовать @@ rowcount после обновления, чтобы видеть, можно ли выйти из цикла.

Я предлагаю использовать WAITFOR в течение нескольких секунд после каждого запроса на обновление для давания других запросов, шанс получить соединяет таблицу а не к использованию диска перегрузки.

6
ответ дан 3 December 2019 в 23:52
поделиться

Как насчет того, чтобы выполнить обновление в пакетах - обновляют 1 000 строк за один раз.

Вы использовали бы некоторое время цикл, который увеличивает счетчик, соответствуя идентификатору строк, которые будут обновлены в каждом повторении запрос на обновление. Это не может ускорить количество времени, которое это занимает для обновления всех 7 миллионов записей, но это должно сделать это гораздо менее вероятным, что пользователи столкнутся с ошибкой из-за захвата записей.

3
ответ дан 3 December 2019 в 23:52
поделиться

Если можно получить запланированное время простоя:

  1. Создайте резервную копию базы данных
  2. Модель восстановления изменения к простому
  3. Удалите все индексы из таблицы, которую Вы обновляете
  4. Добавьте столбец maintenanceflag (ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ INT 0) с некластеризованным индексом
  5. Выполненный: ОБНОВИТЕ nvarchar НАБОРА имени таблицы TOP 1000 от ntext, maintenanceflag = 1 ГДЕ maintenanceflag = 0

Многократно как требуется (в цикле с задержкой).

Однажды завершенный, сделайте другое резервное копирование затем возвращает модель восстановления к тому, что это было первоначально включено, и добавьте старые индексы.

Помните, что каждый индекс или включает тот дополнительный диск причин таблицы ввод-вывод и что простой режим восстановления минимизирует файл журнала ввод-вывод.

3
ответ дан 3 December 2019 в 23:52
поделиться

Запущение теста базы данных на низкоэффективной виртуальной машине не действительно показательно из производственных показателей, тяжелый включенный IO потребует быстрого дискового массива, который отрегулирует виртуализация.

1
ответ дан 3 December 2019 в 23:52
поделиться

Вы могли бы также полагать, что тестирование видело, мог ли пакет SSIS сделать это более эффективно.

Независимо от того, что Вы делаете, сделайте это автоматизированным процессом, который может быть запланирован и выполнен во время от часов. чем меньше пользователей Вы имеете попытка получить доступ к данным, тем быстрее все пойдет. Если вообще возможный, pickout три или четыре самых критических, чтобы измениться и удалить базу данных для maintentance (во время обычно от времени) и сделать их в однопользовательском режиме. После того как Вы получаете самые критические, другие могут быть запланированы один или два ночь.

0
ответ дан 3 December 2019 в 23:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: