2012-07-05 2 views
0

У нас есть процесс, который получает список столбцов таблицы и размеры (тип varchar), каждый из которых должен иметь и модифицировать их, чтобы гарантировать, что он имеет определенный размер.Проверьте размер столбца + таблица изменений или таблица изменений непосредственно

В фактической реализации мы непосредственно выполнять альтер таблицы каждого столбца в списке ...

Будет ли это работать быстрее, если мы проверяем первый, если размер столбца отличается от правильного размера и только тогда делает изменить таблицу?

Статистически есть 4000 или около столбцов таблицы для проверки и 20 столбцов требуется коррекция в наиболее ...

+0

столбцов таблицы и их размеры сохраняются в конкретном table и мы прокручиваем его – VSP

+0

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

ответ

0

В конце концов мы осуществили проверку перед алтарной таблицей, имеющем низкий% случаев, когда это было necesary выполнить альтер команду proccess работает заметно быстрее

2

Edit: Для того, чтобы отразить комментарии:

Что быстрее, зависит от того, насколько дорого операция внести изменения в столбец вместе с тем, сколько столбцов в таблице необходимо изменить. Например, изменение одного столбца нулей - это не очень дорого. Но если у вас много данных, вы и много столбцов в таблице, лучше сделать таблицу для новой копии таблицы. Решая это в зависимости от показателей вашей базы данных, и не всегда есть правильный и неправильный anseer.

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

что-то вроде:

SELECT 
    'some decision logic...' -- substitute values as needed 
FROM 
     INFORMATION_SCHEMA.COLUMNS 
WHERE 
     ISNULL(CHARACTER_MAXIMUM_LENGTH, 5) <> 5 
    AND DATA_TYPE = 'NVARCHAR' 

И вы могли бы добавить в метриках, которые вы хотите, чтобы учесть, размер таблицы, данные числа размера столбцов (группы по) и т.д.

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

+0

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

+0

Тогда используйте это создать список таблиц и столбцов. Еще лучше использовать этот список, чтобы узнать, что вы проверяете. –

+0

Основной вопрос: что работает быстрее, проверить размер для mismach, а затем изменить таблицу или изменить таблицу напрямую? – VSP

Смежные вопросы