2012-02-15 8 views
8

Я пытаюсь изменить тип данных столбца в SQL Server с tinyint на smallint.Как изменить тип данных столбца со значением по умолчанию

Но в моем столбце есть значение по умолчанию, и я не знаю имени ограничения.

Есть ли простой способ сделать это?

Это не работает из-за ограничений по умолчанию:

ALTER TABLE mytable 
Alter Column myColumn smallint NOT NULL default 1 

ответ

19

Вам необходимо сделать это несколькими шагами - сначала: снимите ограничение по умолчанию в своем столбце, а затем измените свой столбец.

Вы можете использовать код что-то вроде этого:

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

Вы могли бы сделать это как три этапа

  • добавить новый столбец с другим именем,
  • копию значения от старой колонки до новой
  • отказаться от старой колонки

Важно, чтобы имя было таким же, а затем повторите процесс, чтобы изменить имя.

+0

Да, может быть решением, но если у меня будет много данных, это будет не очень удобно – GregM

0

Вы можете найти имя ограничения для значения по умолчанию с помощью MS Management Studio. Просто найдите папку таблиц для данной БД и посмотрите в разделе «Ограничения». Если существует множество ограничений, вы можете «Списать ограничения (-ы) на окно запроса, которое отображает соответствующее имя столбца.

Смежные вопросы