触发器结合游标删除关联表数据

USE [数据库]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--MODIFY BY 删除触发器--基本表删除数据时,把对应的调价信息一并清除
ALTER    trigger [dbo].[tg_deleteSBMC]
on [dbo].[SBMC]
for delete
as
Declare @sbmcbh varchar(20),@store varchar(4)

begin
declare  cur_delsbmc cursor for --游标
select deleted.bh,deleted.store
from deleted
open cur_delsbmc --开启游标
fetch next from cur_delsbmc into @sbmcbh,@store
while (@@FETCH_STATUS = 0 )
begin
	delete from HCGL_TJJLB where STORE = @store and [email protected]
	if @@ERROR <> 0
		begin
			close   cur_delsbmc
			deallocate cur_delsbmc
			return
		end

	fetch next from cur_delsbmc into @sbmcbh,@store
end
	 close   cur_delsbmc
	 deallocate cur_delsbmc
end

  

时间: 2024-12-29 06:48:35

触发器结合游标删除关联表数据的相关文章

[PHP]更新中间关联表数据的两种思路

/*--------------------------------------------------------------------------------------------------------- @黑眼诗人 <www.chenwei.ws> ---------------------------------------------------------------------------------------------------------*/ 中间关联表:这里的中

Oracle使用游标删除所有用户数据表中的所有记录脚本

应用场景:因为数据库中的数据涉及机密信息,希望一次性能删除掉所有数据,只保留数据表结构,供新项目开发程序用 测试结果:经查询已删除所有数据 存在问题:数据表如果存在外键的话下面脚本可能执行不成功,请自行删除或者过滤掉该表,见下图 操作办法:直接将下面的脚本内容复制到PQSQL中执行即可 --Oracle使用游标删除所有用户数据表中的所有记录脚本 declare mystring NVARCHAR2(1000):=''; --定义要输出的字符串变量 cursor mycursor is --定义游

SQL Server 触发器例题: --次性删除course表数据,使用触发器替换删除操作,先删除外键表相关数据,再删除course。很难理解

create trigger Course_Delete on course instead of delete as declare @cno varchar(20) --定义变量 select @cno = cno from deleted --临时表里的信息是instead of 替换 delete要删除的信息 delete from score where cno = @cno --instead of 替换操作后执行的代码命令 delete from course where cno=

MYSQL中delete删除多表数据

MYSQL中delete删除多表数据DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释:1. delete from t1 where 条件2.delete t1 from t1 where 条件3. delete t1 from t1,t2 where 条件4.delete t1,t2 from t1,t2 where 条件前 3者是可行的,第4者不可行.也就是简单用delete语句无法进行多表删除数据操作,不过可以建立级联删除,在两个表之间建立级联删除 关系,则

工作随笔——mysql子查询删除原表数据

最近在开发的时候遇到一个mysql的子查询删除原表数据的问题.在网上也看了很多方法,基本也是然并卵(不是写的太乱就是效率太慢). 公司DBA给了一个很好的解决方案,让人耳目一新. DELETE fb.* FROM froadbill.bill fb LEFT JOIN froadbill.refundinfo br ON br.billSeqNo = fb.seq_no WHERE br.billSeqNo IS NULL AND fb.create_time >='20150102000000

MYSQL中delete删除多表数据与删除关联数据

在mysql中删除数据方法有很多种,最常用的是使用delete来删除记录,下面我来介绍delete删除单条记 录与删除多表关联数据的一些简单实例. 1.delete from t1 where 条件 2.delete t1 from t1 where 条件 3.delete t1 from t1,t2 where 条件 4.delete t1,t2 from t1,t2 where 条件 前3者是可行的,第4者不可行. 也就是简单用delete语句无法进行多表删除数据操作,不过可以建立级联删除,

Python--增量循环删除MySQL表数据

需求场景: 有一业务数据库,使用MySQL 5.5版本,每天会写入大量数据,需要不定期将多表中“指定时期前“的数据进行删除,在SQL SERVER中很容易实现,写几个WHILE循环就搞定,虽然MySQL中也存在类似功能,怎奈自己不精通,于是采用Python来实现 话不多少,上脚本: # coding: utf-8 import MySQLdb import time # delete config DELETE_DATETIME = '2016-08-31 23:59:59' DELETE_RO

mysql游标实现复制表数据

BEGIN DECLARE cflag bit DEFAULT 0; DECLARE cid int; declare cname VARCHAR(16); --声明一个游标 declare cur_copy CURSOR for select id,name from fruit; --设置游标结束标记 DECLARE CONTINUE HANDLER for not found set cflag=1; --开启游标 OPEN cur_copy; --循环取出游标里的值 read_loop:

不允许在子查询的同时删除原表数据(ERROR 1093 (HY000))

delete from t where userid in (select userid from t where userid < 10); ERROR 1093 (HY000): You can't specify target table 't' for update in FROM clause delete from t where userid in (select userid from (select userid from t where userid < 10) tmp )