Cambiar ancho de columna

39

¿Aumentar el ancho de una columna (nvarchar) necesariamente eliminará la tabla?

En otras palabras, ¿se puede cambiar el ancho en un entorno de producción con usuarios activos?

Pensé que si el tamaño aumenta (en lugar de disminuir), esto no sería un problema.

Fernando
fuente

Respuestas:

52

Si lo está haciendo a través de una declaración T-SQL como la siguiente, entonces no se producirá una caída de la tabla y puede hacerlo de forma segura en un entorno de producción:

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

Si lo hace a través de la GUI de la tabla de diseño de SSMS, dependerá de la secuencia de comandos que decida usar para implementar el cambio. A veces, insertará datos en una tabla temporal, soltará la tabla original, creará una nueva versión de esa tabla y la insertará nuevamente en la nueva. Una manera fácil de averiguar qué hará es hacer clic en el botón "Generar secuencia de comandos" y mirar el T-SQL que planea ejecutar.

Derek Kromm
fuente
1
Pensé que incluso el botón "Generar secuencia de comandos" arroja una advertencia de que estás a punto de soltar una tabla incluso antes de mostrarte la secuencia de comandos.
Nick Chammas
1
Sí arroja el error, pero en realidad no ejecuta el script hasta que hace clic en Aceptar (o ejecutar o lo que sea) en la ventana con el script. Puede copiar el guión y cancelar la ventana que le muestra el guión.
mrdenny
pero ¿funciona en decir un cambio de flotante a decimal (n, n)?
Nishanth Shaan
¿Qué efecto tiene esto si la tabla se replica? ¿Supongo que las tablas de suscriptores no se actualizarán automáticamente?
tmwoods
18

Aumentar el ancho de columna de una nvarcharcolumna no requerirá una caída de la tabla. Tampoco ninguna ALTER TABLEoperación. Para obtener detalles acerca de las restricciones al cambiar las propiedades de una tabla o columna, puede leer la declaración ALTER TABLE .

Copié las partes más relevantes de la documentación a continuación:

Cambiar el tamaño de una columna

Puede cambiar la longitud, precisión o escala de una columna especificando un nuevo tamaño para el tipo de datos de columna en la cláusula ALTER COLUMN. Si existen datos en la columna, el nuevo tamaño no puede ser menor que el tamaño máximo de los datos. Además, la columna no se puede definir en un índice, a menos que la columna sea un tipo de datos varchar, nvarchar o varbinary y el índice no sea el resultado de una restricción PRIMARY KEY. Ver ejemplo P.

Cerraduras y ALTER TABLE

Los cambios especificados en ALTER TABLE se implementan de inmediato. Si los cambios requieren modificaciones de las filas de la tabla, ALTER TABLE actualiza las filas. ALTER TABLE adquiere un bloqueo de modificación de esquema en la tabla para asegurarse de que ninguna otra conexión haga referencia incluso a los metadatos de la tabla durante el cambio, excepto las operaciones de índice en línea que requieren un bloqueo SCH-M muy corto al final. En una operación ALTER TABLE ... SWITCH, el bloqueo se adquiere en las tablas de origen y destino. Las modificaciones realizadas en la tabla se registran y son completamente recuperables. Los cambios que afectan a todas las filas en tablas muy grandes, como soltar una columna o agregar una columna NOT NULL con un valor predeterminado, pueden tardar mucho tiempo en completarse y generar muchos registros. Estas declaraciones ALTER TABLE deben ejecutarse con el mismo cuidado que cualquier INSERT, UPDATE,

MicSim
fuente
También gran respuesta. Pero solo pude elegir uno. ¡Gracias!
Fernando