技术开发 频道

关于default约束

  【IT168技术文档】

  1. 如果一个field有default 值时,应加上它的constraint 名称,如:

Crate table fb_user ( Id int, Name varchar(10) constraint DF_fb_user_name DEFAULT ‘aaa’ )

  2.  如果要删除一个有default值的字段,但以前又没有指定其constraint名称,这时应先查找这个字段上的constraint名称,然后先删除该constraint,再删除这个field。 

select name as constraint_name,object_name(parent_obj) as table_name from sysobjects where xtype = 'D'

  3.  下面这一段SQL能够重建所有的Default约束,所有Default约束应严格的按约定的规则来命名:DF_tableName_fieldName。

begin tran declare @constraint_name varchar(100) declare @table_name varchar(100) declare @column_name varchar(100) declare @default_value varchar(400) declare @drop_sql nvarchar(1000) declare @add_sql nvarchar(1000) declare cur_constraint cursor static forward_only for select A.name as constraint_name, object_name(A.parent_obj) as table_name, col_name(A.parent_obj ,A.info) as column_name, B.text AS default_value from sysobjects A inner join syscomments B on A.id = B.id where xtype = 'D' open cur_constraint fetch next from cur_constraint into @constraint_name, @table_name, @column_name, @default_value while @@fetch_status = 0 begin set @drop_sql = N'alter table ' + @table_name + ' drop constraint ' + @constraint_name set @add_sql = N'alter table ' + @table_name + ' add constraint ' + @constraint_name
+ ' default '+ @default_value + ' for ' + @column_name exec sp_executesql @stmt = @drop_sql exec sp_executesql @stmt = @add_sql fetch next
from cur_constraint into @constraint_name, @table_name, @column_name, @default_value end close cur_constraint deallocate cur_constraint rollback tran GO
0
相关文章