Разве плохо использовать ALTER TABLE, чтобы изменить размер столбца varchar до большего размера? - PullRequest
6 голосов
/ 31 августа 2011

Мне нужно простое изменение размера столбца от VARCHAR(36) до VARCHAR(40).

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

Если вы прочитали документацию (и многие онлайн-ресурсы, включая SO), вы можете использовать оператор ALTER для изменения размера.

Делает ALTER влияет на способ хранения данных каким-либо образом?Индексы?Статистика?Я хочу избежать снижения производительности из-за этой модификации из-за того, что таблица может стать большой.

Ответы [ 4 ]

12 голосов
/ 31 августа 2011

Просто используйте ALTER TABLE.SSMS немного, эээ, иногда глупа

Вам нужно отбросить и воссоздать зависимые ограничения (FK, уникальность, индекс, проверить и т. Д.)

Однако это только изменение метаданных ибудет очень быстрым для таблицы любого размера (если вы также не измените NOT NULL на NULL или varchar на nvarchar или тому подобное)

4 голосов
/ 31 августа 2011

Нет, ALTER TABLE (http://msdn.microsoft.com/de-de/library/ms190273.aspx) - это способ, которым Microsoft намеревалась внести подобные изменения.

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

2 голосов
/ 25 июня 2014

Следующее должно быть лучшим способом справиться с этим

IF EXISTS (SELECT   1 
               FROM     INFORMATION_SCHEMA.COLUMNS
               WHERE    TABLE_NAME = '<tablename>' 
               AND      COLUMN_NAME = '<field>')
    BEGIN
        ALTER TABLE <tablename> ALTER COLUMN [<field>] varchar(xxxx) null
    END
ELSE
2 голосов
/ 31 августа 2011

Изменения в структуре базы данных НИКОГДА не должны выполняться с использованием SSMS в среде передачи по той же причине, что и вы. Это может разрушить производительность в большом столе. Таблица ALTER - это предпочтительный метод, он быстрее и может быть сохранен в контроле исходного кода как изменение, которое нужно продвигать после тестирования.

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