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渠道='一店';
