DB Enviroment:Sql server2005

Language:T-sql

1.添加主键:

alter table pl_bugdegree
alter column bdid int not null
go
alter table pl_bugdegree
add primary key(bdid)
go

这时,如果想删除Primary key,首先想到的是

alter table pl_bugdegree
drop primary key(bdid)
go
但是,会提示语法错误.Sql的内部解释:

DROP { [CONSTRAINT] constraint_name | COLUMN column_name }

指定从表中删除 constraint_name 或者 column_name。如果兼容级别小于或等于 65,将不允许 DROP COLUMN。可以列出多个列或约束。下面的列不能除去:

  • 1.被复制列。

  • 2.用在索引中的列。

  • 3.用在 CHECK、FOREIGN KEY、UNIQUE 或 PRIMARY KEY 约束中的列。

  • 4.有相关联的默认值(由 DEFAULT 关键字定义)的列,或绑定到默认对象的列。

  • 5.绑定到规则的列。

正确的语法应该是:Drop  [constraint] constraint_name

这时,有个问题是,如何知道constraint_name呢?

我采用这种方法,利用系统视图sysobjects:

View Code
select * from sysobjects
where xtype='PK' and
name
like '%pl_bugdegree%'

这时可以查出主键名称:PK_pl_bugdegree_2145354.但我有个疑问,就是,为什么在上面代码中使用:"..name like '%PK_pl_bugdegree%"却无搜索结果呢?

另附:系统视图Sysobjects的相关资料http://wenku.baidu.com/view/a20df30303d8ce2f00662380.html