sqldel
1. 兩個表有相同的欄位,現在要刪除一個表的內容另一個表的內容也跟著刪除,sql語句怎麼寫
如果你非要同時刪除,那你可以:
1、創建一個觸發器(適用於每次刪除A表,都要刪除B表):
CREATE TRIGGER [tr_del_pk] ON [表A]
FOR DELETE
AS
delete 表A from deleted
where 欄位1= deleted.欄位1
delete 表2 from deleted
where 欄位2 = deleted.欄位2
2、寫個循環(如果你刪除帶有條件,並且條件可能隨時變動):
declare @count int
set @count = 1
begin
delete from 表A where 欄位1 <= @count
delete from 表B where 欄位2 <= @count
end
3、直接刪除(一次執行,條件基本固定)
delete from 表A where .....
delete from 表B where .....
2. 在Sql Server觸發器中判斷操作是Insert還是Update還是Delete
DECLARE
@IsInsert bit,
@IsUpdate bit,
@IsDelete bit
IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)
SET @IsInsert = 1
ELSE
SET @IsInsert = 0
IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
SET @IsUpdate = 1
ELSE
SET @IsUpdate = 0
IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
SET @IsDelete = 1
ELSE
SET @IsDelete = 0
create trigger Update_Del on Table
for update,delete
as
if not exists(select 1 from inserted)
begin /*inserted表無記錄,是刪除*/
end
else
begin /*是更新*/ end
go
關鍵在於Inserted表
觸發器語句中使用了兩種特殊的表:deleted
表和 inserted 表。
Deleted
表用於存儲 DELETE 和 UPDATE 語句所影響的行的復本。在執行 DELETE 或 UPDATE 語句時,行從觸發器表中刪除,並傳輸到 deleted
表中。Deleted 表和觸發器表通常沒有相同的行。
Inserted
表用於存儲 INSERT 和 UPDATE 語句所影響的行的副本。在一個插入或更新事務處理中,新建行被同時添加到 inserted
表和觸發器表中。Inserted 表中的行是觸發器表中新行的副本。
1.插入操作(Insert)
Inserted表有數據,Deleted表無數據
2.刪除操作(Delete)
Inserted表無數據,Deleted表有數據
3.更新操作(Update)
Inserted表有數據(新數據),Deleted表有數據(舊數據)
3. SQL資料庫刪除語句
--刪除訂單明細
delete表3where訂單明細號in(selecta.訂單明細號from表2ainnerjoin表1bona.訂單號=b.訂單號whereb.渠道='一店');
--刪除訂單與訂單明細關系表
deltete表2where訂單號in(select訂單號from表1where渠道='一店');
--刪除訂單
delete表1where渠道='一店';