天天看點

删除SQL表資料時存在限制的解決方法

這幾天在做項目時,清除庫中的資料,但是各表之間都存在限制關系,無法使用 ‘ 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';

删除SQL表資料時存在限制的解決方法

(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限制或字段限制

删除SQL表資料時存在限制的解決方法
1)禁止所有表限制的SQL
删除SQL表資料時存在限制的解決方法
select 'alter table ' + name + ' nocheck constraint all' from sysobjects where type='U'
删除SQL表資料時存在限制的解決方法
删除SQL表資料時存在限制的解決方法
2)删除所有表資料的SQL
删除SQL表資料時存在限制的解決方法
select 'truncate table ' + name from sysobjects where type='U'
删除SQL表資料時存在限制的解決方法
删除SQL表資料時存在限制的解決方法
3)恢複所有表限制的SQL
删除SQL表資料時存在限制的解決方法
select 'alter table ' + name + ' check constraint all' from sysobjects where type='U'
删除SQL表資料時存在限制的解決方法
删除SQL表資料時存在限制的解決方法
4)删除某字段的限制
删除SQL表資料時存在限制的解決方法
declare @name varchar(100)
删除SQL表資料時存在限制的解決方法
--DF為限制名稱字首
删除SQL表資料時存在限制的解決方法
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%'
删除SQL表資料時存在限制的解決方法
--删除限制
删除SQL表資料時存在限制的解決方法
alter table 表名 drop constraint @name
删除SQL表資料時存在限制的解決方法
--為字段添加新預設值和限制
删除SQL表資料時存在限制的解決方法
ALTER TABLE 表名 ADD CONSTRAINT @name  DEFAULT (0) FOR [字段名]
删除SQL表資料時存在限制的解決方法
--删除限制
删除SQL表資料時存在限制的解決方法
ALTER TABLE tablename Drop CONSTRAINT 限制名
删除SQL表資料時存在限制的解決方法
--修改表中已經存在的列的屬性(不包括限制,但可以為主鍵或遞增或唯一)
删除SQL表資料時存在限制的解決方法
ALTER TABLE tablename 
删除SQL表資料時存在限制的解決方法
alter column 列名 int not null
删除SQL表資料時存在限制的解決方法
--添加列的限制
删除SQL表資料時存在限制的解決方法
ALTER TABLE tablename
删除SQL表資料時存在限制的解決方法
ADD CONSTRAINT DF_tablename_列名 DEFAULT(0) FOR 列名
删除SQL表資料時存在限制的解決方法
--添加範圍限制
删除SQL表資料時存在限制的解決方法
alter table  tablename  add  check(性别 in ('M','F'))