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:
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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