如何使用默认值修改列的数据类型

时间:2012-02-15 19:30:48

标签: sql sql-server default-value alter

我正在尝试将SQL Server中列的数据类型从tinyint更改为smallint。

但是我的列上有一个默认值,我不知道约束的名称。

有一种简单的方法吗?

由于默认约束,这不起作用:

ALTER TABLE mytable
Alter Column myColumn smallint NOT NULL default 1

3 个答案:

答案 0 :(得分:21)

您需要分几步完成此操作 - 首先:删除列上的默认约束,然后修改列。

您可以使用以下代码:

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

答案 1 :(得分:2)

你可以把它作为一个三步过程来实现

  • 使用其他名称添加新列
  • 将旧列中的值复制到新
  • 删除旧列

重要的是名称相同,然后重复该过程以更改名称。

答案 2 :(得分:0)

您可以使用MS Management Studio找到默认的约束名称。只需找到给定数据库的tables文件夹,然后在Constraints下查看。如果存在许多约束,则可以“将约束编写脚本到查询窗口,该窗口显示关联的列名称。