How to set a default value for an existing column
这在SQL Server 2008中不起作用:
1 | ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES' |
错误是:
Incorrect syntax near the keyword 'SET'.
号
我做错什么了?
这将在SQL Server中工作:
1 | ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn; |
1 | ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn |
号
不能对此使用alter列,请改用add
1 2 | ALTER TABLE Employee ADD DEFAULT('SANDNES') FOR CityBorn |
正确的方法如下:
运行命令:
1 | sp_help [table name] |
。
复制
放下
1 | ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] |
。
运行以下命令:
1 | ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN] |
Hoodaticus的解决方案是完美的,谢谢,但我也需要它重新运行,并找到这种方式来检查是否已经完成了……
1 2 3 4 5 6 | IF EXISTS(SELECT * FROM information_schema.columns WHERE table_name='myTable' AND column_name='myColumn' AND Table_schema='myDBO' AND column_default IS NULL) BEGIN ALTER TABLE [myDBO].[myTable] ADD DEFAULT 0 FOR [myColumn] --Hoodaticus END |
号
有两种情况可以更改列的默认值,
查询
1 2 3 4 | create table table_name ( column_name datatype default 'any default value' ); |
。
在这种情况下,我的SQL Server不允许修改现有的默认约束值。因此,要更改默认值,我们需要删除现有的系统生成或用户生成的默认约束。之后,可以为特定列设置默认值。
遵循以下步骤:
执行这个系统数据库过程,它以表名作为参数。它返回表中所有列的所有约束的列表。
1 | execute [dbo].[sp_helpconstraint] 'table_name' |
语法:
1 | alter table 'table_name' drop constraint 'constraint_name' |
。
语法:
1 | alter table 'table_name' add default 'default_value' for 'column_name' |
号
干杯@!!!!
1 | ALTER TABLE [dbo].[Employee] ADD DEFAULT ('N') FOR [CityBorn] |
。
刚刚找到3个简单的步骤来更改之前为空的现有列
1 2 3 4 5 6 7 8 | update orders set BasicHours=0 where BasicHours is null alter table orders add default(0) for BasicHours alter table orders alter column CleanBasicHours decimal(7,2) not null |
号
如果已存在具有其默认名称的限制:
1 2 3 4 5 6 7 | -- Drop existing default constraint on Employee.CityBorn DECLARE @default_name varchar(256); SELECT @default_name = [name] FROM sys.default_constraints WHERE parent_object_id=OBJECT_ID('Employee') AND COL_NAME(parent_object_id, parent_column_id)='CityBorn'; EXEC('ALTER TABLE Employee DROP CONSTRAINT ' + @default_name); -- Add default constraint on Employee.CityBorn ALTER TABLE Employee ADD CONSTRAINT df_employee_1 DEFAULT 'SANDNES' FOR CityBorn; |
号
第一个放置约束
https://stackoverflow.com/a/49393045/2547164
1 2 3 4 5 6 7 8 | DECLARE @ConstraintName nvarchar(200) SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__') AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns WHERE NAME = N'__ColumnName__' AND object_id = OBJECT_ID(N'__TableName__')) IF @ConstraintName IS NOT NULL EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName) |
号
第二个创建默认值
1 | ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name] |
号
尝试执行命令;
1 2 3 | ALTER TABLE Person11 ADD CONSTRAINT col_1_def DEFAULT 'This is not NULL' FOR Address |
就像尤克的答案一样,通过检查允许脚本运行多次而不出错。(代码/自定义字符串比使用information_schema.columns少)
1 2 3 4 | IF object_id('DF_SomeName', 'D') IS NULL BEGIN Print 'Creating Constraint DF_SomeName' ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn; END |
号