换句话说,在具有活跃用户的生产环境中可以更改宽度吗?

我认为如果大小增加(而不是减小),这不是问题。

#1 楼

如果通过以下T-SQL语句进行操作,则不会发生表删除,并且可以在生产环境中安全地进行操作:

alter table <table> alter column <column> nvarchar(biggernumber) [not] null


如果通过SSMS设计表GUI进行操作,则取决于它决定使用哪种脚本来实施更改。有时它将数据插入临时表中,删除原始表,创建该表的新版本,然后将其重新插入新表中。找出要执行的操作的一种简单方法是单击“生成脚本”按钮,然后查看计划执行的T-SQL。

#2 楼

增加nvarchar列的列宽不需要删除表。 ALTER TABLE操作也不会。有关更改表或列属性时的限制的详细信息,可以阅读ALTER TABLE语句。
我从下面的文档中复制了最相关的部分:

更改列的大小
您可以通过在ALTER COLUMN子句中为列数据类型指定新的大小来更改列的长度,精度或小数位数。如果列中存在数据,则新大小不能小于数据的最大大小。而且,除非列是varchar,nvarchar或varbinary数据类型,并且索引不是PRIMARY KEY约束的结果,否则无法在索引中定义该列。请参见示例P。
锁和ALTER TABLE
立即执行ALTER TABLE中指定的更改。如果更改需要修改表中的行,则ALTER TABLE将更新行。 ALTER TABLE在表上获取模式修改锁,以确保更改期间没有其他连接甚至引用该表的元数据,除非联机索引操作最后需要非常短的SCH-M锁。在ALTER TABLE…SWITCH操作中,在源表和目标表上都获得了锁定。对表所做的修改将被记录并且可以完全恢复。影响很大表中所有行的更改(例如删除列或使用默认值添加NOT NULL列)可能需要很长时间才能完成并生成许多日志记录。这些ALTER TABLE语句应与影响许多行的任何INSERT,UPDATE或DELETE语句一样谨慎地执行。