Время преобразования столбцов SQL истекло - PullRequest
0 голосов
/ 19 июля 2010

Мне нужен запрос, который изменит один столбец с nvarchar (max) до 32. Реальная проблема в том, что в этой таблице 800 000 строк.И время выполнения моей таблицы изменений myTable alter column mycolumn истекло.Любые предложения или советы?

Ответы [ 5 ]

3 голосов
/ 19 июля 2010

Может быть, добавление нового столбца, выбор данных в новом столбце, удаление старого столбца и переименование нового столбца с исходным именем помогут.

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

2 голосов
/ 19 июля 2010

Если вы запускаете SQL-скрипт в SSMS, для него не установлено время ожидания. Вы можете получить тайм-аут только с помощью c # и т. Д., По умолчанию это 30-секундный CommandTimeout.

Я бы предложил, например, изменить время ожидания до 3600 или запустить его в SSMS.

Еще одна вещь, о которой стоит подумать: это изменение будет записано в журнал, чтобы можно было выполнить откат. Убедитесь, что вы предварительно изменили размер файла журнала до приемлемого размера, чтобы он не увеличивался каждый раз на 10% (когда вносимые изменения используют текущее пространство журнала).

Или совместить это с ответом Кодиманикса

1 голос
/ 19 июля 2010

Две вещи, которые я могу придумать, чтобы попробовать:

  • сначала выполните UPDATE, обрезая данные до 32 символов; это может помочь ALTER работать быстрее, так как оно не должно выполнять само усечение. UPDATE может быть при необходимости дозирован

Или

  • Создать новый столбец nvarchar(32) с временным именем
  • Заполните его из nvarchar(max) столбца
  • DROP nvarchar(max) столбец
  • Переименуйте столбец (32) в исходное имя столбца (max)
0 голосов
/ 19 июля 2010

Когда вы выполните инструкцию, откройте еще одну копию SSMS и запустите инструкцию

sp_who2

, которая покажет вам, среди прочего, столбец с именем «BlkBy».Это SPID процесса, который может блокировать выполнение вашего запроса.У вас может быть открытая транзакция где-то еще в системе.Если вы знаете, что это за процесс, и знаете, что он не взорвет вашу вселенную, убейте его.

0 голосов
/ 19 июля 2010

См. this.

Вы также можете указать счетчик тайм-аута или просто отключить его через графический интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...