2012-02-15 9 views
8

Sto provando a modificare il tipo di dati di una colonna in SQL Server da tinyint a smallint.Come modificare il tipo di dati di una colonna con un valore predefinito

Ma c'è un valore predefinito sulla mia colonna e non conosco il nome del vincolo.

C'è un modo semplice per farlo?

Questo non funziona a causa del vincolo di default:

ALTER TABLE mytable 
Alter Column myColumn smallint NOT NULL default 1 

risposta

19

È necessario eseguire questa operazione in diversi passaggi: innanzitutto: eliminare il vincolo predefinito sulla colonna, quindi modificare la colonna.

Si potrebbe utilizzare il codice simile al seguente:

-- 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

Si potrebbe fare come un processo in tre fasi

  • aggiungere la nuova colonna con un nome diverso,
  • copia i valori dalla vecchia colonna al nuovo
  • rilasciare la colonna precedente

È importante che il nome sia lo stesso, quindi ripetere la procedura per modificare il nome.

+0

Sì, potrebbe essere una soluzione, ma se ho molti dati non sarebbe grandioso – GregM

0

È possibile trovare il nome del vincolo per il default utilizzando MS Management Studio. Trova la cartella delle tabelle per il DB dato e guarda sotto Vincoli. Se ci sono molti vincoli, puoi "Script i vincoli a una finestra di query che mostra il nome della colonna associata