Блокирует ли изменение размера столбца таблицу?

Блокирует ли изменение размера столбца таблицу?

Что произойдет, если я изменю столбец с nvarchar(2) на nvarchar(10) или столбец с char(2) на nvarchar(10). Блокирует ли это, реорганизует ли таблицу или работает без каких-либо последствий или простоев?

Я пытался найти, что произойдет, если я изменю столбец, но ничего не нашел. Это большая таблица с одним или двумя столбцами, которые нужно изменить. Речь идет о MS SQL Server 2008 R2.

решение1

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

ИЛИ Измените таблицу в таблице, разработанной в SSMS, а затем используйте кнопку «Сгенерировать сценарий изменения». Когда я изменяю свой столбец с Char(2) на NVARCHAR(10). Сгенерированный сценарий изменения выдает следующее:

   CREATE TABLE dbo.Tmp_t2
    (
    id int NULL,
    c1 nvarchar(50) NULL,
    c2 nvarchar(2) NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_t2 SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.t2)
     EXEC('INSERT INTO dbo.Tmp_t2 (id, c1, c2)
        SELECT id, CONVERT(nvarchar(50), c1), c2 FROM dbo.t2 WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.t2
GO
EXECUTE sp_rename N'dbo.Tmp_t2', N't2', 'OBJECT' 
GO
COMMIT

решение2

Если вы используете команды ALTER, то они создадут другую таблицу, скопируют существующие данные в новую таблицу, удалит старую таблицу по завершении, а затем переименует новую таблицу, используя старое имя таблицы. Я не думаю, что это лучшая практика делать во время работы базы данных, но есть методы работы с производственными данными.

http://www.sqlmag.com/article/tsql3/resizing-a-column-in-a-large-table.aspx

решение3

Никакие другие операции (например, вставка, обновление, удаление) не могут быть выполнены, когда тип данных столбца таблицы изменяется, вся таблица будет заблокирована. Также нельзя выбрать с помощью NOLOCK.

Связанный контент