多表联合删除3!

时间:2021-09-29 00:26:14
设a表有两个属性:aID shuxing_a(属性a)
  01 aa
  02 bb
  03 cc

b 表有两个属性: bID shuxing_b(属性b)
  10 dd
  20 ee
  30 ff

联系集a_b属性: aID bID (与a表b表一样是一个独立的表)
  01 10
  02 20
  02 30 
foreign key aID references a表
foreign key bID references b表

怎么删除b表中的一条记录? 这条记录由a表的某条记录通过联系集决定

比如 指定删除 把与a表中属性为bb这条记录有关的记录在b表中都删除!即应该把b表中的 20 ee 和 30 ff这两条记录删除
(本人认为还应该把联系集中的记录 02 20和02 30这两条记录也一并删除)

要求用SQL语句回帖。

21 个解决方案

#1


引用 6 楼 hyp3388191 的回复:
上面的语句都试过了,没能成功

我测试成功:

--> 生成测试数据表: [a]
IF OBJECT_ID('[a]') IS NOT NULL
DROP TABLE [a]
GO
CREATE TABLE [a] ([aID] [nvarchar](10),[shuxing_a] [nvarchar](10))
INSERT INTO [a]
SELECT '01','aa' UNION ALL
SELECT '02','bb' UNION ALL
SELECT '03','cc'

--> 生成测试数据表: [b]
IF OBJECT_ID('[b]') IS NOT NULL
DROP TABLE [b]
GO
CREATE TABLE [b] ([bID] [int],[shuxing_b] [nvarchar](10))
INSERT INTO [b]
SELECT '10','dd' UNION ALL
SELECT '20','ee' UNION ALL
SELECT '30','ff'

--> 生成测试数据表: [a_b]
IF OBJECT_ID('[a_b]') IS NOT NULL
DROP TABLE [a_b]
GO
CREATE TABLE [a_b] ([aID] [nvarchar](10),[bID] [int])
INSERT INTO [a_b]
SELECT '01','10' UNION ALL
SELECT '02','20' UNION ALL
SELECT '02','30'

--SELECT * FROM [a]
--SELECT * FROM [b]
--SELECT * FROM [a_b]

-->SQL查询如下:
DELETE c
FROM   b, a_b c
WHERE  b.bID = c.bID
AND b.bID IN (20, 30)

DELETE b
WHERE  bID IN (20, 30)

SELECT * FROM [b]
SELECT * FROM [a_b]
/*
bID         shuxing_b
----------- ----------
10          dd

(1 行受影响)

aID        bID
---------- -----------
01         10

(1 行受影响)
*/
如果没把问题表达清楚,一味的不对,没成功,谁也帮不了你。

#2


test

#3


create table a(aid varchar(10),shuxing_a varchar(10))
insert into a values('01', 'aa')
insert into a values('02', 'bb')
insert into a values('03', 'cc')
create table b(bid varchar(10),shuxing_b varchar(10))
insert into b values('10', 'dd')
insert into b values('20', 'ee')
insert into b values('30', 'ff')
create table a_b(aid varchar(10), bid varchar(10))
insert into a_b values('01', '10')
insert into a_b values('02', '20')
insert into a_b values('02', '30')
go

delete b from b , a , a_b c
where b.bid = c.bid and c.aid = a.aid and a.shuxing_a = 'bb'

select * from b
/*
bid        shuxing_b  
---------- ---------- 
10         dd

(所影响的行数为 1 行)
*/

drop table a , b, a_b

#4


忘了说明,a_b你们没有外键约束,a_b表有两个外键约束
foreign key aID references a表
foreign key bID references b表

#5


明明测试是成功的,你非说不成功?

耽搁你的时间,也耽搁我的时间.

#6


引用 4 楼 hyp3388191 的回复:
忘了说明,a_b你们没有外键约束,a_b表有两个外键约束
foreign key aID references a表
foreign key bID references b表



--> 生成测试数据表: [a]
IF OBJECT_ID('[a]') IS NOT NULL
DROP TABLE [a]
GO
CREATE TABLE [a] ([aID] [nvarchar](10) PRIMARY KEY,[shuxing_a] [nvarchar](10))
INSERT INTO [a]
SELECT '01','aa' UNION ALL
SELECT '02','bb' UNION ALL
SELECT '03','cc'

--> 生成测试数据表: [b]
IF OBJECT_ID('[b]') IS NOT NULL
DROP TABLE [b]
GO
CREATE TABLE [b] ([bID] [int] PRIMARY KEY,[shuxing_b] [nvarchar](10))
INSERT INTO [b]
SELECT '10','dd' UNION ALL
SELECT '20','ee' UNION ALL
SELECT '30','ff'

--> 生成测试数据表: [a_b]
IF OBJECT_ID('[a_b]') IS NOT NULL
DROP TABLE [a_b]
GO
CREATE TABLE [a_b] ([aID] [nvarchar](10) REFERENCES a(aID),[bID] [int] REFERENCES b(bID))
INSERT INTO [a_b]
SELECT '01','10' UNION ALL
SELECT '02','20' UNION ALL
SELECT '02','30'

--SELECT * FROM [a]
--SELECT * FROM [b]
--SELECT * FROM [a_b]

-->SQL查询如下:
DELETE c
FROM   b, a_b c
WHERE  b.bID = c.bID
AND b.bID IN (20, 30)

DELETE b
WHERE  bID IN (20, 30)

SELECT * FROM [b]
SELECT * FROM [a_b]
/*
bID         shuxing_b
----------- ----------
10          dd

(1 行受影响)

aID        bID
---------- -----------
01         10

(1 行受影响)
*/
这样???

#7


。。。。。。请加上外键再试一下,刚才没有写好,参看http://topic.csdn.net/u/20100606/00/21f56cbc-33e8-4576-8d49-ce4b0fad8ca8.html?seed=1733757673&r=66008278#r_66008278

只有外键约束,没有其他约束了

#8


。。。。。。请加上外键再试一下,刚才没有写好

只有外键约束,没有其他约束了

#9


你的需求和外键不外键的没有关系.

此贴不在回复,耽搁时间.

#10


引用 7 楼 hyp3388191 的回复:
。。。。。。请加上外键再试一下,刚才没有写好,参看http://topic.csdn.net/u/20100606/00/21f56cbc-33e8-4576-8d49-ce4b0fad8ca8.html?seed=1733757673&r=66008278#r_66008278

只有外键约束,没有其他约束了
看好了,你头上(6#)已经加了外键的。

#11


应该给个建表语句,测试数据

#12



create table a(aid varchar(10) primary key,shuxing_a varchar(10))
insert into a values('01', 'aa')
insert into a values('02', 'bb')
insert into a values('03', 'cc')
create table b(bid varchar(10) primary key,shuxing_b varchar(10))
insert into b values('10', 'dd')
insert into b values('20', 'ee')
insert into b values('30', 'ff')
create table a_b(aid varchar(10)references a(aid), bid varchar(10)references b(bid))
insert into a_b values('01', '10')
insert into a_b values('02', '20')
insert into a_b values('02', '30')

delete b from b , a , a_b c
where b.bid = c.bid and c.aid = a.aid and a.shuxing_a = 'bb'


服务器: 消息 547,级别 16,状态 1,行 14
DELETE 语句与 COLUMN REFERENCE 约束 'FK__a_b__bid__70DDC3D8' 冲突。该冲突发生于数据库 'EquipmentManager',表 'a_b', column 'bid'。
语句已终止。

#13


引用 12 楼 hyp3388191 的回复:
SQL code

create table a(aid varchar(10) primary key,shuxing_a varchar(10))
insert into a values('01', 'aa')
insert into a values('02', 'bb')
insert into a values('03', 'cc')
create table b(bid ……
无视我的回复,路过。

#14



if OBJECT_ID('a_b') is NOT NULL
drop table a_b
if OBJECT_ID('a') is NOT NULL
drop table a
if OBJECT_ID('b') is NOT NULL
drop table b

create table a(aid varchar(10) primary key,shuxing_a varchar(10))
insert into a values('01', 'aa')
insert into a values('02', 'bb')
insert into a values('03', 'cc')

create table b(bid varchar(10) primary key,shuxing_b varchar(10))
insert into b values('10', 'dd')
insert into b values('20', 'ee')
insert into b values('30', 'ff')

create table a_b(aid varchar(10)references a(aid), bid varchar(10)references b(bid))
insert into a_b values('01', '10')
insert into a_b values('02', '20')
insert into a_b values('02', '30')

delete b from b , a , a_b c
where b.bid = c.bid and c.aid = a.aid and a.shuxing_a = 'bb'


用的是sql2000

#15


没有无视你的回复,我都看着呢

#16


引用 14 楼 hyp3388191 的回复:
SQL code

if OBJECT_ID('a_b') is NOT NULL
drop table a_b
if OBJECT_ID('a') is NOT NULL
drop table a
if OBJECT_ID('b') is NOT NULL
drop table b

create table a(aid varchar(10) primary key,shux……

管你几千的,6楼试了吗先?另外两贴不要再回,只在这贴把问题解决。

#17



--> 生成测试数据表: [a]
IF OBJECT_ID('[a]') IS NOT NULL
    DROP TABLE [a]
GO
CREATE TABLE [a] ([aID] [nvarchar](10) PRIMARY KEY,[shuxing_a] [nvarchar](10))
INSERT INTO [a]
SELECT '01','aa' UNION ALL
SELECT '02','bb' UNION ALL
SELECT '03','cc'

--> 生成测试数据表: [b]
IF OBJECT_ID('[b]') IS NOT NULL
    DROP TABLE [b]
GO
CREATE TABLE [b] ([bID] [int] PRIMARY KEY,[shuxing_b] [nvarchar](10))
INSERT INTO [b]
SELECT '10','dd' UNION ALL
SELECT '20','ee' UNION ALL
SELECT '30','ff'

--> 生成测试数据表: [a_b]
IF OBJECT_ID('[a_b]') IS NOT NULL
    DROP TABLE [a_b]
GO
CREATE TABLE [a_b] ([aID] [nvarchar](10) REFERENCES a(aID),[bID] [int] REFERENCES b(bID))
INSERT INTO [a_b]
SELECT '01','10' UNION ALL
SELECT '02','20' UNION ALL
SELECT '02','30'

--SELECT * FROM [a]
--SELECT * FROM [b]
--SELECT * FROM [a_b]

-->SQL查询如下:
DELETE c
FROM   b, a_b c
WHERE  b.bID = c.bID
    AND b.bID IN (20, 30)

DELETE b
WHERE  bID IN (20, 30)

SELECT * FROM [b]
SELECT * FROM [a_b]

这个成功了,非常感谢,不过上面那个为什么不得?

#18


--> 生成测试数据表: [a]
IF OBJECT_ID('[a]') IS NOT NULL
DROP TABLE [a]
GO
CREATE TABLE [a] ([aID] [nvarchar](10) PRIMARY KEY,[shuxing_a] [nvarchar](10))
INSERT INTO [a]
SELECT '01','aa' UNION ALL
SELECT '02','bb' UNION ALL
SELECT '03','cc'

--> 生成测试数据表: [b]
IF OBJECT_ID('[b]') IS NOT NULL
DROP TABLE [b]
GO
CREATE TABLE [b] ([bID] [int] PRIMARY KEY,[shuxing_b] [nvarchar](10))
INSERT INTO [b]
SELECT '10','dd' UNION ALL
SELECT '20','ee' UNION ALL
SELECT '30','ff'

--> 生成测试数据表: [a_b]
IF OBJECT_ID('[a_b]') IS NOT NULL
DROP TABLE [a_b]
GO
CREATE TABLE [a_b] ([aID] [nvarchar](10) REFERENCES a(aID),[bID] [int] REFERENCES b(bID))
INSERT INTO [a_b]
SELECT '01','10' UNION ALL
SELECT '02','20' UNION ALL
SELECT '02','30'

--SELECT * FROM [a]
--SELECT * FROM [b]
--SELECT * FROM [a_b]

-->SQL查询如下:
--创建删除记录的存储过程
IF OBJECT_ID('p_delete') IS NOT NULL
DROP PROC p_delete
GO
CREATE PROC p_delete
@shuxing_a VARCHAR(100)
AS
SELECT c.* INTO #a_b
FROM a,  b, a_b c
WHERE  b.bID = c.bID 
AND a.aID=c.aID
AND a.[shuxing_a]=@shuxing_a

DELETE c
FROM a,  b, a_b c
WHERE  b.bID = c.bID 
AND a.aID=c.aID
AND a.[shuxing_a]=@shuxing_a

DELETE b
FROM a,  b, #a_b c
WHERE  b.bID = c.bID 
AND a.aID=c.aID
AND a.[shuxing_a]=@shuxing_a
GO
--调用过程删除记录
EXEC p_delete 'bb'
--查询结果
SELECT * FROM [b]
SELECT * FROM [a_b]
/*
bID         shuxing_b
----------- ----------
10          dd

(1 行受影响)

aID        bID
---------- -----------
01         10

(1 行受影响)
*/

#19


引用 17 楼 hyp3388191 的回复:
SQL code

--> 生成测试数据表: [a]
IF OBJECT_ID('[a]') IS NOT NULL
    DROP TABLE [a]
GO
CREATE TABLE [a] ([aID] [nvarchar](10) PRIMARY KEY,[shuxing_a] [nvarchar](10))
INSERT INTO [a]
SELECT '01','aa'……

...

#20





一个概念:删除级联数据时.应该先删除关系表数据,再动被引用表数据.
相反初始化数据时,要先填充被引用表数据,再填充引用表数据.当然被引用表也可以不被引用.


#21


学习了!

#1


引用 6 楼 hyp3388191 的回复:
上面的语句都试过了,没能成功

我测试成功:

--> 生成测试数据表: [a]
IF OBJECT_ID('[a]') IS NOT NULL
DROP TABLE [a]
GO
CREATE TABLE [a] ([aID] [nvarchar](10),[shuxing_a] [nvarchar](10))
INSERT INTO [a]
SELECT '01','aa' UNION ALL
SELECT '02','bb' UNION ALL
SELECT '03','cc'

--> 生成测试数据表: [b]
IF OBJECT_ID('[b]') IS NOT NULL
DROP TABLE [b]
GO
CREATE TABLE [b] ([bID] [int],[shuxing_b] [nvarchar](10))
INSERT INTO [b]
SELECT '10','dd' UNION ALL
SELECT '20','ee' UNION ALL
SELECT '30','ff'

--> 生成测试数据表: [a_b]
IF OBJECT_ID('[a_b]') IS NOT NULL
DROP TABLE [a_b]
GO
CREATE TABLE [a_b] ([aID] [nvarchar](10),[bID] [int])
INSERT INTO [a_b]
SELECT '01','10' UNION ALL
SELECT '02','20' UNION ALL
SELECT '02','30'

--SELECT * FROM [a]
--SELECT * FROM [b]
--SELECT * FROM [a_b]

-->SQL查询如下:
DELETE c
FROM   b, a_b c
WHERE  b.bID = c.bID
AND b.bID IN (20, 30)

DELETE b
WHERE  bID IN (20, 30)

SELECT * FROM [b]
SELECT * FROM [a_b]
/*
bID         shuxing_b
----------- ----------
10          dd

(1 行受影响)

aID        bID
---------- -----------
01         10

(1 行受影响)
*/
如果没把问题表达清楚,一味的不对,没成功,谁也帮不了你。

#2


test

#3


create table a(aid varchar(10),shuxing_a varchar(10))
insert into a values('01', 'aa')
insert into a values('02', 'bb')
insert into a values('03', 'cc')
create table b(bid varchar(10),shuxing_b varchar(10))
insert into b values('10', 'dd')
insert into b values('20', 'ee')
insert into b values('30', 'ff')
create table a_b(aid varchar(10), bid varchar(10))
insert into a_b values('01', '10')
insert into a_b values('02', '20')
insert into a_b values('02', '30')
go

delete b from b , a , a_b c
where b.bid = c.bid and c.aid = a.aid and a.shuxing_a = 'bb'

select * from b
/*
bid        shuxing_b  
---------- ---------- 
10         dd

(所影响的行数为 1 行)
*/

drop table a , b, a_b

#4


忘了说明,a_b你们没有外键约束,a_b表有两个外键约束
foreign key aID references a表
foreign key bID references b表

#5


明明测试是成功的,你非说不成功?

耽搁你的时间,也耽搁我的时间.

#6


引用 4 楼 hyp3388191 的回复:
忘了说明,a_b你们没有外键约束,a_b表有两个外键约束
foreign key aID references a表
foreign key bID references b表



--> 生成测试数据表: [a]
IF OBJECT_ID('[a]') IS NOT NULL
DROP TABLE [a]
GO
CREATE TABLE [a] ([aID] [nvarchar](10) PRIMARY KEY,[shuxing_a] [nvarchar](10))
INSERT INTO [a]
SELECT '01','aa' UNION ALL
SELECT '02','bb' UNION ALL
SELECT '03','cc'

--> 生成测试数据表: [b]
IF OBJECT_ID('[b]') IS NOT NULL
DROP TABLE [b]
GO
CREATE TABLE [b] ([bID] [int] PRIMARY KEY,[shuxing_b] [nvarchar](10))
INSERT INTO [b]
SELECT '10','dd' UNION ALL
SELECT '20','ee' UNION ALL
SELECT '30','ff'

--> 生成测试数据表: [a_b]
IF OBJECT_ID('[a_b]') IS NOT NULL
DROP TABLE [a_b]
GO
CREATE TABLE [a_b] ([aID] [nvarchar](10) REFERENCES a(aID),[bID] [int] REFERENCES b(bID))
INSERT INTO [a_b]
SELECT '01','10' UNION ALL
SELECT '02','20' UNION ALL
SELECT '02','30'

--SELECT * FROM [a]
--SELECT * FROM [b]
--SELECT * FROM [a_b]

-->SQL查询如下:
DELETE c
FROM   b, a_b c
WHERE  b.bID = c.bID
AND b.bID IN (20, 30)

DELETE b
WHERE  bID IN (20, 30)

SELECT * FROM [b]
SELECT * FROM [a_b]
/*
bID         shuxing_b
----------- ----------
10          dd

(1 行受影响)

aID        bID
---------- -----------
01         10

(1 行受影响)
*/
这样???

#7


。。。。。。请加上外键再试一下,刚才没有写好,参看http://topic.csdn.net/u/20100606/00/21f56cbc-33e8-4576-8d49-ce4b0fad8ca8.html?seed=1733757673&r=66008278#r_66008278

只有外键约束,没有其他约束了

#8


。。。。。。请加上外键再试一下,刚才没有写好

只有外键约束,没有其他约束了

#9


你的需求和外键不外键的没有关系.

此贴不在回复,耽搁时间.

#10


引用 7 楼 hyp3388191 的回复:
。。。。。。请加上外键再试一下,刚才没有写好,参看http://topic.csdn.net/u/20100606/00/21f56cbc-33e8-4576-8d49-ce4b0fad8ca8.html?seed=1733757673&r=66008278#r_66008278

只有外键约束,没有其他约束了
看好了,你头上(6#)已经加了外键的。

#11


应该给个建表语句,测试数据

#12



create table a(aid varchar(10) primary key,shuxing_a varchar(10))
insert into a values('01', 'aa')
insert into a values('02', 'bb')
insert into a values('03', 'cc')
create table b(bid varchar(10) primary key,shuxing_b varchar(10))
insert into b values('10', 'dd')
insert into b values('20', 'ee')
insert into b values('30', 'ff')
create table a_b(aid varchar(10)references a(aid), bid varchar(10)references b(bid))
insert into a_b values('01', '10')
insert into a_b values('02', '20')
insert into a_b values('02', '30')

delete b from b , a , a_b c
where b.bid = c.bid and c.aid = a.aid and a.shuxing_a = 'bb'


服务器: 消息 547,级别 16,状态 1,行 14
DELETE 语句与 COLUMN REFERENCE 约束 'FK__a_b__bid__70DDC3D8' 冲突。该冲突发生于数据库 'EquipmentManager',表 'a_b', column 'bid'。
语句已终止。

#13


引用 12 楼 hyp3388191 的回复:
SQL code

create table a(aid varchar(10) primary key,shuxing_a varchar(10))
insert into a values('01', 'aa')
insert into a values('02', 'bb')
insert into a values('03', 'cc')
create table b(bid ……
无视我的回复,路过。

#14



if OBJECT_ID('a_b') is NOT NULL
drop table a_b
if OBJECT_ID('a') is NOT NULL
drop table a
if OBJECT_ID('b') is NOT NULL
drop table b

create table a(aid varchar(10) primary key,shuxing_a varchar(10))
insert into a values('01', 'aa')
insert into a values('02', 'bb')
insert into a values('03', 'cc')

create table b(bid varchar(10) primary key,shuxing_b varchar(10))
insert into b values('10', 'dd')
insert into b values('20', 'ee')
insert into b values('30', 'ff')

create table a_b(aid varchar(10)references a(aid), bid varchar(10)references b(bid))
insert into a_b values('01', '10')
insert into a_b values('02', '20')
insert into a_b values('02', '30')

delete b from b , a , a_b c
where b.bid = c.bid and c.aid = a.aid and a.shuxing_a = 'bb'


用的是sql2000

#15


没有无视你的回复,我都看着呢

#16


引用 14 楼 hyp3388191 的回复:
SQL code

if OBJECT_ID('a_b') is NOT NULL
drop table a_b
if OBJECT_ID('a') is NOT NULL
drop table a
if OBJECT_ID('b') is NOT NULL
drop table b

create table a(aid varchar(10) primary key,shux……

管你几千的,6楼试了吗先?另外两贴不要再回,只在这贴把问题解决。

#17



--> 生成测试数据表: [a]
IF OBJECT_ID('[a]') IS NOT NULL
    DROP TABLE [a]
GO
CREATE TABLE [a] ([aID] [nvarchar](10) PRIMARY KEY,[shuxing_a] [nvarchar](10))
INSERT INTO [a]
SELECT '01','aa' UNION ALL
SELECT '02','bb' UNION ALL
SELECT '03','cc'

--> 生成测试数据表: [b]
IF OBJECT_ID('[b]') IS NOT NULL
    DROP TABLE [b]
GO
CREATE TABLE [b] ([bID] [int] PRIMARY KEY,[shuxing_b] [nvarchar](10))
INSERT INTO [b]
SELECT '10','dd' UNION ALL
SELECT '20','ee' UNION ALL
SELECT '30','ff'

--> 生成测试数据表: [a_b]
IF OBJECT_ID('[a_b]') IS NOT NULL
    DROP TABLE [a_b]
GO
CREATE TABLE [a_b] ([aID] [nvarchar](10) REFERENCES a(aID),[bID] [int] REFERENCES b(bID))
INSERT INTO [a_b]
SELECT '01','10' UNION ALL
SELECT '02','20' UNION ALL
SELECT '02','30'

--SELECT * FROM [a]
--SELECT * FROM [b]
--SELECT * FROM [a_b]

-->SQL查询如下:
DELETE c
FROM   b, a_b c
WHERE  b.bID = c.bID
    AND b.bID IN (20, 30)

DELETE b
WHERE  bID IN (20, 30)

SELECT * FROM [b]
SELECT * FROM [a_b]

这个成功了,非常感谢,不过上面那个为什么不得?

#18


--> 生成测试数据表: [a]
IF OBJECT_ID('[a]') IS NOT NULL
DROP TABLE [a]
GO
CREATE TABLE [a] ([aID] [nvarchar](10) PRIMARY KEY,[shuxing_a] [nvarchar](10))
INSERT INTO [a]
SELECT '01','aa' UNION ALL
SELECT '02','bb' UNION ALL
SELECT '03','cc'

--> 生成测试数据表: [b]
IF OBJECT_ID('[b]') IS NOT NULL
DROP TABLE [b]
GO
CREATE TABLE [b] ([bID] [int] PRIMARY KEY,[shuxing_b] [nvarchar](10))
INSERT INTO [b]
SELECT '10','dd' UNION ALL
SELECT '20','ee' UNION ALL
SELECT '30','ff'

--> 生成测试数据表: [a_b]
IF OBJECT_ID('[a_b]') IS NOT NULL
DROP TABLE [a_b]
GO
CREATE TABLE [a_b] ([aID] [nvarchar](10) REFERENCES a(aID),[bID] [int] REFERENCES b(bID))
INSERT INTO [a_b]
SELECT '01','10' UNION ALL
SELECT '02','20' UNION ALL
SELECT '02','30'

--SELECT * FROM [a]
--SELECT * FROM [b]
--SELECT * FROM [a_b]

-->SQL查询如下:
--创建删除记录的存储过程
IF OBJECT_ID('p_delete') IS NOT NULL
DROP PROC p_delete
GO
CREATE PROC p_delete
@shuxing_a VARCHAR(100)
AS
SELECT c.* INTO #a_b
FROM a,  b, a_b c
WHERE  b.bID = c.bID 
AND a.aID=c.aID
AND a.[shuxing_a]=@shuxing_a

DELETE c
FROM a,  b, a_b c
WHERE  b.bID = c.bID 
AND a.aID=c.aID
AND a.[shuxing_a]=@shuxing_a

DELETE b
FROM a,  b, #a_b c
WHERE  b.bID = c.bID 
AND a.aID=c.aID
AND a.[shuxing_a]=@shuxing_a
GO
--调用过程删除记录
EXEC p_delete 'bb'
--查询结果
SELECT * FROM [b]
SELECT * FROM [a_b]
/*
bID         shuxing_b
----------- ----------
10          dd

(1 行受影响)

aID        bID
---------- -----------
01         10

(1 行受影响)
*/

#19


引用 17 楼 hyp3388191 的回复:
SQL code

--> 生成测试数据表: [a]
IF OBJECT_ID('[a]') IS NOT NULL
    DROP TABLE [a]
GO
CREATE TABLE [a] ([aID] [nvarchar](10) PRIMARY KEY,[shuxing_a] [nvarchar](10))
INSERT INTO [a]
SELECT '01','aa'……

...

#20





一个概念:删除级联数据时.应该先删除关系表数据,再动被引用表数据.
相反初始化数据时,要先填充被引用表数据,再填充引用表数据.当然被引用表也可以不被引用.


#21


学习了!