2012-02-15 32 views
8

Estoy tratando de cambiar el tipo de datos de una columna en SQL Server de tinyint a smallint.Cómo modificar el tipo de datos de una columna con un valor predeterminado

Pero hay un valor predeterminado en mi columna y no sé el nombre de la restricción.

¿Hay una manera fácil de hacerlo?

Esto no funcionan debido a la restricción predeterminada:

ALTER TABLE mytable 
Alter Column myColumn smallint NOT NULL default 1 

Respuesta

19

Debe hacer esto en varios pasos: primero: elimine la restricción predeterminada en su columna, luego modifique su columna.

podría utilizar Código algo como esto:

-- find out the name of your default constraint - 
-- assuming this is the only default constraint on your table 
DECLARE @defaultconstraint sysname 

SELECT @defaultconstraint = NAME 
FROM sys.default_constraints 
WHERE parent_object_id = object_ID('dbo.mytable') 

-- declare a "DROP" statement to drop that default constraint 
DECLARE @DropStmt NVARCHAR(500) 

SET @DropStmt = 'ALTER TABLE dbo.mytable DROP CONSTRAINT ' + @defaultconstraint 

-- drop the constraint 
EXEC(@DropStmt) 

-- alternatively: if you *know* the name of the default constraint - you can do this 
-- more easily just by executing this single line of T-SQL code: 

-- ALTER TABLE dbo.mytable DROP CONSTRAINT (fill in name of constraint here) 

-- modify the column's datatype   
ALTER TABLE dbo.mytable 
Alter Column myColumn smallint NOT NULL 

-- re-apply a default constraint - hint: give it a sensible name! 
ALTER TABLE dbo.mytable 
ADD CONSTRAINT DF_mytable_myColumn DEFAULT 1 FOR MyColumn 
2

que podría hacerlo como un proceso de tres pasos

  • añadir la nueva columna con un nombre diferente,
  • copia los valores de la columna anterior a la nueva
  • soltar la columna anterior

Es importante que el nombre sea el mismo, luego repita el proceso para cambiar el nombre.

+0

Sí, podría ser una solución, pero si tengo muchos datos, no sería genial – GregM

0

se puede encontrar el nombre de restricción para el predeterminado usando MS Management Studio. Solo encuentra la carpeta de tablas para el DB dado y mira debajo de Restricciones. Si hay muchas restricciones, puede "Guiar la (s) restricción (es) a una ventana de consulta que muestre el nombre de la columna asociada.

Cuestiones relacionadas