使用sql语句创建和删除约束

使用sql语句创建和删除约束
 
约束类型
主键约束(Primary Key constraint--:要求主键列数据唯一,并且不允许为空。 
唯一约束(Unique constraint--:要求该列唯一,允许为空,但只能出现一个空值。 
检查约束(Check constraint--:某列取值范围限制,格式限制等,如有关年龄、邮箱(必须有@)的约束。 
默认约束(Default constraint--:某列的默认值,如在数据库里有一项数据很多重复,可以设为默认值。 
外键约束(Foreign Key constraint--:用于在两个表之间建立关系,需要指定引用主表的哪一列。 
**********************************************************************
添加约束:
alter table tablename
add constraint pk_colname primary key(colname)主建约束
alter table tablename
add constraint uq_colname unique (colname)唯一约束
alter table tablename
add constraint df_colname default('地址不详')for colname 默认约束
alter table tablename
add constraint ck_colname check(colname between 12 and 15)检查约束
alter table tablename
add constraint fk_colname foreign key(colname)references tablename(colname)外建约束
删除约束:
alter table tablename
drop constraint 约束名 
创建登陆帐户/数据库用户
   
创建登录帐户:
exec sp_grantlogin 'windows 域名/域帐户'
创建数据库用户:
exec sp_grantdbaccess '登陆帐户''数据库用户'
向数据库授权:
grant 权限[on 表名]to 数据库用户
以上语句可直接在企业管理器中操作
  
企业管理器/安全性/登陆/新建登陆
填写名称和密码
选择数据库访问,再底下"数据库角色中允许" db_owner也打上勾
 
默认约束使用户能够定义一个值,每当用户没有在某一列中输入值时,则将所定义的值提供给这一列。如果用户对此列没有特定的要求,可以使用默认约束来为此列输入默认值。
 

在SQL Server 中,如果给表的一个字段设置了默认值,就会在系统表sysobjects中生成一个默认约束。
如果想删除这个设置了默认值的字段(假设此字段名column1),
执行“ALTER TABLE table1 DROP COLUMN column1”时就会报错:

The object 'DF__xxxxxxxxxxx' is dependent on column 'column1'.
ALTER TABLE DROP COLUMN column1failed because one or more objects Access this column.

所以在删除此字段时需要先将系统表中的对应默认约束删除, 可以使用下面的脚本进行删除:

-- this script drops the default constraint which is generated by the setting of default value.
DECLARE @tablename VARCHAR(100), @columnname VARCHAR(100), @tab VARCHAR(100)
SET @tablename='CountryGroupEmailAndWaitAux'
SET @columnname='actionOfHasNoValidEmail'

declare @defname varchar(100)
declare @cmd varchar(100)

select @defname = name
FROM sysobjects so
JOIN sysconstraints sc
ON so.id = sc.constid
WHERE object_name(so.parent_obj) = @tablename
AND so.xtype = 'D'
AND sc.colid =
(SELECT colid FROM syscolumns
WHERE id = object_id(@tablename) AND
name = @columnname)

select @cmd='alter table '+ @tablename+ ' drop constraint '+ @defname
if @cmd is null print 'No default constraint to drop'
exec (@cmd)


在删除对应的默认约束后,执行:
ALTER TABLE table1 DROP COLUMN column1
即可删除字段。
posted @ 2016-07-15 09:59  Net-Spider  阅读(444)  评论(0)    收藏  举报