ITPub博客

首页 > 应用开发 > IT综合 > 关于default约束

关于default约束

原创 IT综合 作者:kitesky 时间:2005-01-23 17:29:19 0 删除 编辑

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

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/66009/viewspace-787706/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-04-22

  • 博文量
    273
  • 访问量
    2169300