A. sql server删除主表的一条数据,外键表的数据全没了
--使用SYSREFERENCES
--删除外键
set xact_abort on
begin tran
DECLARE @SQL VARCHAR(99)
DECLARE CUR_FK CURSOR LOCAL FOR
SELECT 'alter table ['+ OBJECT_NAME(FKEYID) + '] drop constraint ' + OBJECT_NAME(CONSTID) FROM SYSREFERENCES
--删除所有外键
OPEN CUR_FK
FETCH CUR_FK INTO @SQL
WHILE @@FETCH_STATUS =0
BEGIN
EXEC(@SQL)
FETCH CUR_FK INTO @SQL
END
CLOSE CUR_FK
DEALLOCATE CUR_FK
-- 删除拆腔所有表
DECLARE CUR_TAB CURSOR LOCAL FOR
SELECT 'DROP TABLE '+ NAME FROM SYSOBJECTS WHERE XTYPE='U' -- AND NAME LIKE 'xx%'
OPEN CUR_TAB
FETCH CUR_TAB INTO @SQL
WHILE @@FETCH_STATUS =0
BEGIN
EXEC(@SQL)
FETCH CUR_TAB INTO @SQL
END
CLOSE CUR_TAB
DEALLOCATE CUR_TAB
commit tran
--使用sys.foreign_keys
--disable and enable 外键
这里解释下 { CHECK | NOCHECK } CONSTRAINT
Specifies that constraint_name is enabled or disabled. This option can only be used with FOREIGN KEY and CHECK constraints. When NOCHECK is specified, the constraint is disabled and future inserts or updates to the column are not validated against the constraint conditions. DEFAULT, PRIMARY KEY, and UNIQUE constraints cannot be disabled.
上面的解释是,NOCHECK对应于disable, CHECK则对应于enable
select
'ALTER TABLE '+o.name+' NOCHECK CONSTRAINT '+fk.name+';' AS Command
from
sys.foreign_keys fk
JOIN sys.all_objects o ON (fk.parent_object_id=o.object_id)
具体会有多少条记录,取决于你的数据库里面,有多少个外键了。
然后复制梁慧结果, 粘贴旅渣衫出来执行. 就停用 外键约束了.
再删除数据
数据删除好了, 再启用外键约束
select
'ALTER TABLE ' + o.name + ' CHECK CONSTRAINT ' + fk.name + ';' AS Command
from
sys.foreign_keys fk
JOIN sys.all_objects o ON (fk.parent_object_id = o.object_id)
和前面的一样, 把查询出来的结果, 复制一下, 然后粘贴出来去执行.
--使用sys.foreign_key_columns
--查出外键
select name
from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id
where f.parent_object_id=object_id('表名')
--删除外键
alter table 表名 drop constraint 外简名
B. sql server怎样删除外键约束
用这个跟:alter table 表名称 drop constraint 外键的名称
使用如下SQL语句查询出表中外键约束名称:
1 select name 2 from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id 3 where f.parent_object_id=object_id('表名')
执行如下SQL语句删除链返即可。
1 alter table 表名 drop constraint 外键约束名
(2)sql删除所有外键扩展阅读:
注族手意事项
键约束可双击关系线添加兆唤嫌外键约束,外键约束有四种不同的选项:CASCADE, SET NULL, NO ACTION, RESTRICT。
1、CASCADE : 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。[ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。
2、SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。[注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。
3、NO ACTION: InnoDB拒绝删除或者更新父表。
4、RESTRICT: 拒绝删除或者更新父表。
C. sqlserver怎么删除有外键关联的数据
--使用SYSREFERENCES
--删除外键
set xact_abort on
begin tran
DECLARE @SQL VARCHAR(99)
DECLARE CUR_FK CURSOR LOCAL FOR
SELECT 'alter table ['+ OBJECT_NAME(FKEYID) + '] drop constraint ' + OBJECT_NAME(CONSTID) FROM SYSREFERENCES
--删除所有外键
OPEN CUR_FK
FETCH CUR_FK INTO @SQL
WHILE @@FETCH_STATUS =0
BEGIN
EXEC(@SQL)
FETCH CUR_FK INTO @SQL
END
CLOSE CUR_FK
DEALLOCATE CUR_FK
-- 删除所有表
DECLARE CUR_TAB CURSOR LOCAL FOR
SELECT 'DROP TABLE '+ NAME FROM SYSOBJECTS WHERE XTYPE='U' -- AND NAME LIKE 'xx%'
OPEN CUR_TAB
FETCH CUR_TAB INTO @SQL
WHILE @@FETCH_STATUS =0
BEGIN
EXEC(@SQL)
FETCH CUR_TAB INTO @SQL
END
CLOSE CUR_TAB
DEALLOCATE CUR_TAB
commit tran
--使用sys.foreign_keys
--disable and enable 外键
这里解释下 { CHECK | NOCHECK } CONSTRAINT
Specifies that constraint_name is enabled or disabled. This option can only be used with FOREIGN KEY and CHECK constraints. When NOCHECK is specified, the constraint is disabled and future inserts or updates to the column are not validated against the constraint conditions. DEFAULT, PRIMARY KEY, and UNIQUE constraints cannot be disabled.
上面的解释是,NOCHECK对应于disable, CHECK则对应于enable
select
'ALTER TABLE '+o.name+' NOCHECK CONSTRAINT '+fk.name+';' AS Command
from
sys.foreign_keys fk
JOIN sys.all_objects o ON (fk.parent_object_id=o.object_id)
具体会有多少条记录,取决于你的数据库里面,有多少个外键了。
然后复制结果, 粘贴出来执行. 就停用 外键约束了.
再删除数据
数据删除好了, 再启用外键约束
select
'ALTER TABLE ' + o.name + ' CHECK CONSTRAINT ' + fk.name + ';' AS Command
from
sys.foreign_keys fk
JOIN sys.all_objects o ON (fk.parent_object_id = o.object_id)
和前面的一样, 把查询出来的结果, 复制一下, 然后粘贴出来去执行.
--使用sys.foreign_key_columns
--查出外键
select name
from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id
where f.parent_object_id=object_id('表名')
--删除外键
alter table 表名 drop constraint 外简名
D. SQL server 删除全部外键
--查出外键
select name
from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id
where f.parent_object_id=object_id('表名')
--删除外键
alter table 表名 drop constraint 外简名
E. 如何删除数据库中所有外键关系
如何删除数据库中所有外键关系
--删除主键
alter table Stu_PkFk_S drop constraint PK_S
删除SQL SERVER外键
alter table Stu_PkFk_Sc drop constraint FK_s
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键
比如
学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键
课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键
成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键
F. SQL 怎样删除有外键约束的表
删除外键约束的表,首先要删除外键关联,然后才可以删除表。
如:
1、创建表author
:
CREATE TABLE [dbo].[author]
([ID] [bigint] NOT NULL PRIMARY KEY,
[AuthorName] [char] (10) NULL,
[address] [char] (480) NULL,
[introction] [ntext] NULL)
2、创建myBBS表:
CREATE TABLE [dbo].[myBBS] (
[ID] [bigint] IDENTITY (1, 1) NOT NULL,
[authorId] [bigint] NOT NULL,
[Title] [char] (40) NULL,
[Date_of_Created] [datetime] NULL,
[Abstract] [char] (480) NULL,
[Content] [ntext] NULL)
3、创建外键关系:
alter table dbo.mybbs add constraint FK_mybbs_author
foreign key (authorId)
references dbo.author([id]) ON UPDATE CASCADE ON DELETE CASCADE
4、在删除表前,要删除外键,语法如下:
alter table dbo.mybbs drop constraint FK_mybbs_author
5、然后再删除表:
drop table [dbo].[myBBS]
G. 如何用sql语句删除外键约束
用sql语句删除外键约束的具体步骤如下:
我们需要准备的材料分别是:电脑、SQL SERVER 2008。
1、首先我们用SQL SERVER 2008打开需要删除外键约束的表,鼠标右键点击左侧的“dbo”选项选择“设击”。
H. 如何删除sql中带外键的表数据
为什么一定要一句话呢?一个sql语句不能同时删除两张表,除非通过外键级联删除或者触发器,最正常的做法当然是写成2个sql语句,然后用一个trans来保证数据一致性,如果非要用一个sql语句,可以有一个变通方法,写一侧存储过程,删除两张表,然后写的一句sql是执行这个存储过程