① sqlserver兩張表數據聯級刪除問題
給你做個簡單試驗吧
創建class表,里邊其他欄位我就略了
createtableclass(classidintnotnullprimarykey,
classnamevarchar(20))
創建學生表
createtablestudent(studentidintnotnullprimarykey,
studentnamevarchar(10),
classidint)
添加外鍵級聯刪除或更新約束
_classidforeignkey(classid)referencesclass(classid)
向class表增加數據
insertintoclassvalues(1,'1班')
insertintoclassvalues(2,'2班')
向student表增加數據
insertintostudentvalues(1,'aa',1)
insertintostudentvalues(2,'bb',2)
insertintostudentvalues(3,'cc',3)--這條是增加不進去的,會報錯
刪除class表裡一班的數據
deletefromclasswhereclassid=1
檢查 student 表裡數據
這個時候你就發現,為1班學生的那數據也同時被刪了
② sql多表關聯刪除
刪除多表關聯數據的三種方法
1、級聯刪除
createtablea
(
idvarchar(20)primarykey,
passwordvarchar(20)notnull
)
createtableb
(
idintidentity(1,1)primarykey,
namevarchar(50)notnull,
userIdvarchar(20),
foreignkey(userId)referencesa(id)ondeletecascade
)
表B創建了外碼userId 對應A的主碼ID,聲明了級聯刪除
測試數據:
insertavalues('11','aaa')
insertavalues('23','aaa')
insertbvalues('da','11')
insertbvalues('das','11')
insertbvalues('ww','23')
刪除A表內id為『11』的數據,發現B表內userId 為「11」也被資料庫自動刪除了
deleteawhereid='11'
2、採用存儲過程
A表:AID Aname 主健:AID
B表:BID BelongAID Bname 主健:BID,外健:BelongAID
C表:CID BelongBID Cname 主健:CID,外健:BelongBID
D表:DID BelongCID Dname 主健:DID,外健:BelongCID
其中:
A表和B表通過A.AID和B.BelongAID 創建了外健關系
B表和C表通過B.BID和C.BelongBID 創建了外健關系
C表和D表通過C.CID和D.BelongCID 創建了外健關系
3、採用觸發器
刪除Class表中的一條記錄的同時刪除該記錄Class_No欄位值在Student表中對應的記錄。
CreateTriggerClass_delete
onClass
fordelete
as
begin
deletefromStudent
whereClass_No=(selectClass_Nofromdeleted)
end
③ sql 兩個表關聯刪除數據
刪除主-從表的記錄可以建立簡單存儲過程來實現:
CREATE PROCEDURE [存儲過程]
(
@Id VARCHAR(50)
)
AS
DELETE [子表] WHERE [關聯Id] = @Id
DELETE [主表] WHERE [Id] = @Id
GO
執行方法:EXECUTE [存儲過程] @Id
④ sql跨表刪除
你說的這個問題有些麻煩:
首先,用一個存儲過程解決是最方便的:
IF OBJECT_ID('del', 'P') IS NOT NULL
DROP PROC del
GO
CREATE PROC del
@stuname INT
AS
DECLARE @ID INT
SELECT @ID=id FROM student where name=@stuname --得到id
delete from student where id=@Id
delete from mark where id=@id
GO
執行此存儲過程:
EXEC del 'rose'
如果只能是只寫一個語句的話,那就只能先定義好表
chengji表中的id列是student表的外鍵,
然後就是級聯刪除,用到CASCADE。
完整點寫出來就是:
alter table mark
add
constraint fk_student_id
foreign key references mark(id)
on delete cascade --這一行是關鍵,默認是不級聯刪除
-- on delete no action
這樣我們只要刪除表student中的數據就可以同時刪除mark表中的數據
delete from student where name='rose'
你要是還有問題就再讓讓我吧。希望你能早點解決這個問題
⑤ sql中多表關聯刪除
分成兩句執行,或寫存儲過程。
分成兩句寫時注意包括在一個事務中,避免一個成功一個失敗。
⑥ SQL 多個表關聯查詢!和刪除!
兩個表之間就沒有什麼關系么? 比如 表一的某欄位 = (或者</>=/<=/<>) 表二的某欄位
⑦ sql多表連接刪除問題
把這些表中的comid分別作為lm_company表comid的外鍵添加級聯刪除功能可以了
⑧ sql多表連接 查詢 與刪除
1:
SELECT
客戶姓名
訂單號
時間
FROM
訂單表
JOIN 客戶表
ON ( 訂單表.UID = 客戶表.UID)
JOIN
訂單時間表
ON ( 訂單表.DID = 訂單時間表.DID)
WHERE
( SELECT COUNT(*) FROM 訂單表 d WHERE d.UID = 客戶表.UID ) > 3
2:
-- 先刪除 訂單時間表
DELETE
訂單時間表
WHERE
DID IN (
SELECT DID FROM
訂單表
JOIN 客戶表
ON ( 訂單表.UID = 客戶表.UID)
WHERE
客戶姓名 = '張三'
);
-- 後刪除 訂單表.
DELETE
訂單表
WHERE
UID IN ( SELECT UID FROM 客戶表 WHERE 客戶姓名 = '張三');
-- 最後刪除 客戶表
DELETE
客戶表
WHERE
客戶姓名 = '張三';
⑨ sql多表刪除語句 在線等
--1 如何刪除type的一條記錄
go
create proc procDeleteTypeById
@TID int
as
begin
--先刪除最外層子表的關聯記錄 (pront表)
delete from proct where mstid in(select mstid from mstype where stid in(select stid from stype where tid=@TID))
--在刪除mstype表中的關聯記錄
delete from mstype where stid in(select stid from stype where tid=@TID)
--在刪除stype表中關聯記錄
delete from stype where tid=@TID
--最後刪除根表記錄
delete from [type] where tid=@Tid
end
--2 刪除stype表中記錄同上
go
create proc procDeleteStype
@STID int
as
begin
--先刪除最外層子表的關聯記錄 (pront表)
delete from proct where mstid in(select mstid from mstype where stid=
@STID)
--在刪除mstype表中的關聯記錄
delete from mstype where stid=@STID
--最後刪除根表中的關聯記錄
delete from stype where stid=@STID
end
⑩ sql語句多表刪除問題
原則上,同意youyuan1688和ytbelwxg的方法. 5個表,如果每個表都和lm_company表的comid欄位有直接主外鍵關系.那麼ytbelwxg的方法是最佳方案; 仔細看了你的連接條件,猜想,並不是每個表都和lm_company表的comid欄位有直接主外鍵關系.所以通過主外鍵級聯刪除的方案就不可行,那麼就必須逐個表來刪除,而且刪除的順序也有講究,先刪子表,再刪主表. 本例中,刪除的順序應該是e,d,c,b,a; --1.刪除e; sql1="delete from lm_newsinfo from lm_newsinfo as e, lm_company as a where a.comid=e.news_comid and a.comid=" + lblid.Text +";" --2.刪除d; sql2="delete from lm_message from lm_company as a ,lm_Yuzhan as b ,lm_Bookinfo as c ,lm_message as d where a.comid=b.yuzhan_comid and b.yuzhan_id=c.Bkinfo_yuzhanid and c.Bkinfo_id=d.message_bookid and a.comid=" + lblid.Text +";" --刪除c; sql3="delete from lm_Bookinfo from lm_company as a ,lm_Yuzhan as b ,lm_Bookinfo as c where a.comid=b.yuzhan_comid and b.yuzhan_id=c.Bkinfo_yuzhanid and a.comid=" + lblid.Text + ";" --刪除b; sql4="delete from lm_Yuzhan where yuzhan_comid=" + lblid.Text + ";" --刪除a; sql5="delete from lm_company where comid=" + lblid.Text + ";" --合並sql1,sql2,sql3,sql4,sql5 sql=sql1+sql2+sql3+sql4+sql5 --在你的客戶端執行sql命令串即可