Что произойдет, если я изменю столбец с nvarchar (2) на nvarchar (10) или столбец с char (2) на nvarchar (10). Эта блокировка, реорганизация таблицы или это работает без каких-либо последствий или простоев?
Я попытался выяснить, что произойдет, если я изменю столбец, но ничего не нашел. Это большая таблица с одним или двумя столбцами, которые нужно изменить. Это о MS SQL Server 2008 R2.
Самый простой способ выяснить это - использовать тестовую среду, создать фиктивную таблицу, и некоторые фиктивные записи применяют изменение, о котором идет речь, а затем отслеживают действия с помощью профилировщика.
ИЛИ Измените таблицу в таблице, созданной в 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
Если вы используете команды ALTER, он создаст другую таблицу, скопирует существующие данные в новую таблицу, по завершении отбросит старую таблицу, а затем переименует новую таблицу со старым именем таблицы. Я не думаю, что это лучший способ делать это во время работы с базой данных, но есть методы для работы с производственными данными.
http://www.sqlmag.com/article/tsql3/resizing-a-column-in-a-large-table.aspx
Никакая другая операция (например, вставка обновления и удаление) не может быть выполнена при изменении типа данных столбца таблицы, вся таблица будет заблокирована. также нельзя выбрать с помощью NOLOCK.