sql server删除主键约束所想到的

从网上找到了下面一段代码:

declare @Pk varchar(100);
select @Pk=Name from sysobjects where Parent_Obj=OBJECT_ID(‘表名‘) and xtype=‘PK‘;
if @Pk is not null
begin
exec(‘Alter table 表名 Drop ‘+ @Pk) --删除原主键
end

这里的重点是表sysobjects,sysobjects表是系统表,在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行,上面的xtype是表示的是类型,比如PK是主键,F是外键,也就是说,删除外键的话,只需要把PK改为F就可以了,同理还有默认约束D等等。

exec(‘sql语句‘)是一个存储过程,执行sql语句

其实,利用好sysobjects这个表的话,我们可以作不少文章的,比如看一个对象(表、数据库、存储过程等)是否存在

时间: 2024-08-06 10:07:24

sql server删除主键约束所想到的的相关文章

oracle数据库添加,查询,删除主键约束

     主键约束在每个表中只有一个,但是一个主键约束可以由多个列组成 可以在创建表的时候就创建主键约束,也可以通过alter语句添加主键约束 1:添加主键约束 [1] 语法: CREATE TABLE 表名(        字段名  primary key,      字段名....., ); 示例: CREATE TABLE student(  id number primary key, name varchar(20), age number(3), email varchar2(50)

Oracle如何删除主键约束的同时也删除索引

一.现象 在oracle10g中删除主键约束后,在插入重复数据时候仍然报“ORA-00001”错误. 二.原因 Oracle在的10g版本中对内部函数"atbdui"进行了调整,导致在删除约束的时候无法删除用户创建的索引.这个现象被Oracle分类到了“PROBLEM”. 三.方法 在删除约束的时候需要显示的指定“drop index”选项来完成索引的级链删除. 例:alter table table_name drop constraint constraint_name casca

sql完美删除外键约束,避免产生问题

解决无法删除表,提示被外键约束引用 有时想删除某个表时,提示“无法删除对象 'Orders',因为该对象正由一个 FOREIGN KEY 约束引用”,原因很简单不要急躁,它被其它表的外键引用了,所以无法删除,在此只需先找到哪些表的外键引用了该表的字段.通过系统函数就能解决(SQL Server系统函数提供了非常完善的功能,能代替我们查找和解决许多问题). select     fk.name,fk.object_id,OBJECT_NAME(fk.parent_object_id) as ref

mybatis 针对SQL Server 的 主键id生成策略

SQL Server中命令: select newId()  ,可以得到SQL server数据库原生的UUID值,因此我们可以将这条指令写到 Mybatis的主键生成策略配置selectKey中. 如下: 在 mapper.xml 类型映射配置文件中 <insert id="insert" parameterType="com.hqdl.xiaoyi.bean.SpUser"> <selectKey keyProperty="id&qu

db2数据库创建删除主键约束和创建删除唯一键约束

创建.删除唯一约束: db2 "alter table tabname add unique(colname)" db2 "alter table tabname drop unique CONSTNAME " 创建主键约束: db2 "alter table staff add primary key (id)" db2 "alter table t_da_jkda_rkxzl drop primary key"

sql 语句删除主键、更改主键、删除重复列(多列组合)

--alter table HistoryData drop constraint PK_HistoryData alter table HistoryData add constraint PK_HistoryData primary key (CollectionTime,Code) 更改主键 delete from HistoryData where CollectionTime between'2014-09-01 00:00:00' and '2014-11-01 00:00:00'a

SQL Server 主表主键自增量,如何获取主键呢?

开发过程中经常存在主表的主键是自增量的情况,需要获取增量值才能插入字表数据,获取方法如下三种: IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值. @@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值. SCOPE_IDENTITY() 返回为当前会话和当前作用域中的某个表生成的最新标识值. 推荐使用IDENT_CURRENT ,不容易因为域和表产生错误值. 参考资料: 1.http://www.cnblogs.com/Gin-23333/p/3

sql server中主键列的插入问题

仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'dbo.t_test'中的标识列指定显式值. SET IDENTITY_INSERT dbo.t_test ON INSERT INTO dbo.t_test(id,name) VALUES (4,'c') SET IDENTITY_INSERT dbo.t_test OFF

主键约束 primary key

主键的作用: 可以唯一标识 一条数据,每张表里面只能有一个主键,.主键特性: 非空且唯一.当表里没有主键的时,第一个出现的非空且为唯一的列,被当成主键. 例子:create table tb3(     id int primary key,    name varchar(20) not null); 唯一标识 一条数据 #删除主键约束mysql -> alter table tb3           -> drop primary key #添加主键约束mysql> alter t