這幾天在做項目時,清除庫中的資料,但是各表之間都存在限制關系,無法使用 ‘ truncate table 表名 ’語句進行操作,通過查詢資料,找到了解決方法,當表之間存在限制關聯時,想要執行truncate删除語句,就要先将限制禁用掉,删除後在恢複限制,就可以操作了。具體方法如下:
(1)查詢要删除表存在哪些限制的SQL
select constraint_name, constraint_type, status from user_constraints where table_name='要删除的表名';
select constraint_name, constraint_type, status from user_constraints where table_name='PRJ_PROJECT';
(2)禁止外鍵限制的SQL
方式一:
alter table '表名' disable constraint '限制名稱';
alter table PRJ_PROJECT disable constraint SYS_C0018174;
方式二:
alter table '表名' modify constraint '限制名稱' disable cascade;
alter table PRJ_PROJECT modify constraint PK_PRJ_PROJECT disable cascade;
(3)執行truncate 語句删除資料
truncate table '表名';
truncate table PRJ_PROJECT;
(4)恢複外鍵限制的SQL
方式一:
alter table '要恢複的表名' enable constraint '限制名稱';
alter table PRJ_PROJECT enable constraint SYS_C0018174;
方式二:
alter table '要恢複的表名' modify constraint '限制名稱' enable;
alter table PRJ_PROJECT modify constraint PK_PRJ_PROJECT enable;
對建立及删除一些表、字段、列及範圍的限制的相關操作進行了總結整理,具體如下:
建立與删除SQL限制或字段限制
1)禁止所有表限制的SQL select 'alter table ' + name + ' nocheck constraint all' from sysobjects where type='U' 2)删除所有表資料的SQL select 'truncate table ' + name from sysobjects where type='U' 3)恢複所有表限制的SQL select 'alter table ' + name + ' check constraint all' from sysobjects where type='U' 4)删除某字段的限制 declare @name varchar(100) --DF為限制名稱字首 select @name=b.name from syscolumns a,sysobjects b where a.id=object_id('表名') and b.id=a.cdefault and a.name='字段名' and b.name like 'DF%' --删除限制 alter table 表名 drop constraint @name --為字段添加新預設值和限制 ALTER TABLE 表名 ADD CONSTRAINT @name DEFAULT (0) FOR [字段名]
--删除限制 ALTER TABLE tablename Drop CONSTRAINT 限制名 --修改表中已經存在的列的屬性(不包括限制,但可以為主鍵或遞增或唯一) ALTER TABLE tablename alter column 列名 int not null --添加列的限制 ALTER TABLE tablename ADD CONSTRAINT DF_tablename_列名 DEFAULT(0) FOR 列名 --添加範圍限制 alter table tablename add check(性别 in ('M','F'))