我正在尝试使用SQL Server 2008中的SQL语句更改列的默认值.我在很多地方发现如何在创建表/添加列时设置默认值但不是如何设置它/列已存在后修改它.
这是我可以用来设置它添加:
ALTER TABLE MyTable ADD MyColumn int NOT NULL DEFAULT 0
Run Code Online (Sandbox Code Playgroud)
这有效,但如果我稍后尝试修改它:
ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL DEFAULT -1
ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL SET DEFAULT -1
Run Code Online (Sandbox Code Playgroud)
这些都不是语法正确的,我找不到我假装在任何地方的语法.我唯一的选择是添加一个新列,复制前一列的值,然后删除上一列和新列以进行更改,但这对我来说似乎不对.
有没有办法只用一个简单的句子做我想做的事情?
谢谢.
Ada*_*ski 63
添加具有默认值的列时,会发生以下情况:创建了默认约束:
create table _temp
( x int default 1)
Run Code Online (Sandbox Code Playgroud)
sp_help 结果:
constraint_type constraint_name
DEFAULT on column x DF___temp__x__5A3B20F9
Run Code Online (Sandbox Code Playgroud)
因此,列定义中的default子句只是创建约束的快捷方式; 默认值不是列的固有属性.如果要修改现有列的默认值,则必须先删除约束:
alter table _temp drop constraint DF___temp__x__5A3B20F9
Run Code Online (Sandbox Code Playgroud)
然后创建一个新的默认约束:
alter table _temp add constraint DF_temp_x default 2 for x
Run Code Online (Sandbox Code Playgroud)
小智 28
DECLARE @Command nvarchar(max), @ConstraintName nvarchar(max), @TableName nvarchar(max), @ColumnName nvarchar(max)
SET @TableName = 'TableName'
SET @ColumnName = 'ColumnName'
SELECT @ConstraintName = name
FROM sys.default_constraints
WHERE parent_object_id = object_id(@TableName)
AND parent_column_id = columnproperty(object_id(@TableName), @ColumnName, 'ColumnId')
SELECT @Command = 'ALTER TABLE ' + @TableName + ' DROP CONSTRAINT ' + @ConstraintName
EXECUTE sp_executeSQL @Command
SELECT @Command = 'ALTER TABLE ' + @TableName + ' ADD CONSTRAINT ' + @ConstraintName + ' DEFAULT 1 FOR ' + @ColumnName
EXECUTE sp_executeSQL @Command
Run Code Online (Sandbox Code Playgroud)
You*_*Bob 12
您应该删除DEFAULT约束并添加一个这样的新约束
alter table Mytable
drop constraint <constraint name>
go
alter table MyTable
add constraint df_MyTable_MyColumn default -1 for MyColumn
go
Run Code Online (Sandbox Code Playgroud)
使用sp_helpconstraint MyTable获取约束名称
DEFAULT是一种约束.你想用ALTER TABLE ADD CONSTRAINT.
ALTER TABLE MyTable
ADD CONSTRAINT <constraint name>
DEFAULT -1 FOR MyColumn
Run Code Online (Sandbox Code Playgroud)
您需要先删除当前约束,例如:
ALTER TABLE MyTable
DROP CONSTRAINT <constraint name>
Run Code Online (Sandbox Code Playgroud)