Как изменить тип данных столбца со значением по умолчанию - PullRequest
9 голосов
/ 15 февраля 2012

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

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

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

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

ALTER TABLE mytable
Alter Column myColumn smallint NOT NULL default 1

Ответы [ 3 ]

21 голосов
/ 15 февраля 2012

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

Вы можете использовать код примерно так:

-- 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 голосов
/ 15 февраля 2012

Вы можете сделать это в три этапа

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

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

0 голосов
/ 15 февраля 2012

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

...