mysql存储过程删除一个表的数据同时将这条数据添加到另一个表中_动态复制一个表中一条数据到另一个表中(列不完全相同)(存储过程实现)...

本文介绍了如何使用MySQL存储过程实现在删除表中数据的同时,将其复制到一个回收站表中,以备恢复。涉及了临时变量、表调用以及大量字段的处理,适用于具有多张用户表的部门级回收站功能。存储过程通过选择性地复制记录,避免了程序实现可能带来的问题。
摘要由CSDN通过智能技术生成

因为要用到回收站功能,删除一条记录,要先放到一个delete表中,以便以后恢复

要求:

1、delete表要比被删除表中多三项(用于表明删除用户,删除的是哪种用户表,删除该条数据在该用户表中的id)

2、用户表有多张(一个部门一张,但是一个部门又有多个用户,所有设计数据库时,回收站表只设置了一张,因为如果每一部门设置一张delete表,那么有很多跨部门操作,数据库最后终于一个用户的回收站里面记录整理起来很麻烦)

3、表中的记录项很多,有40多个属性,所有如果有程序来实现,数据量太大,会出现不可预期的错误,不得不用存储过程

因为自己对存储过程也不熟悉,一边写,一边学习,用了将近一天的时间,终于搞定了,其中主要难题:

1、数据存放到临时变量中,

2、对其中一个变量——表的调用

现在把存储过程放起来,也是对我自己一天工作的肯定,高手不要见笑

ALTER PROCEDURE [dbo].[copy_data]

@tablename varchar(30),

@t_id int ,

@u_id int

as

set nocount on

declare @tm varchar(500)

declare @jh int

declare @ajh int

declare @gjz varchar(100)

declare @sjms varchar(5000)

declare @fsdd varchar(100)

declare @fsrq nchar(10)

declare @zyrw varchar(1000)

declare @psz varchar(20)

declare @psrq nchar(10)

declare @tgz varchar(50)

declare @zrz varchar(50)

declare @sc nchar(4)

declare @ly varchar(8)

declare @cjh varchar(20)

declare @srz nchar(10)

declare @flh int

declare @dph nchar(10)

declare @bz varchar(500)

declare @xpdx bigint

declare @xpgs nchar(10)

declare @xpxs nchar(11)

declare @scrid int

declare @scr nchar(10)

declare @scsj datetime

declare @scbm int

declare @shr nchar(10)

declare @shsj datetime

declare @ecbz varchar(500)

declare @gdr nchar(10)

declare @gdsj datetime

declare @xgsj datetime

declare @flag nchar(1)

declare @ysurl varchar(100)

declare @ysfile varchar(250)

declare @xgurl varchar(100)

declare @xgfile varchar(250)

declare @xwurl varchar(500)

declare @xwnr varchar(4000)

declare @textall varchar(4000)

declare @fei nvarchar(4000)

set @fei=N'select @tm=[tm]

,@jh=[jh]

,@ajh=[ajh]

,@gjz=[gjz]

,@sjms=[sjms]

,@fsdd=[fsdd]

,@fsrq=[fsrq]

,@zyrw=[zyrw]

,@psz=[psz]

,@psrq=[psrq]

,@tgz=[tgz]

,@zrz=[zrz]

,@sc=[sc]

,@ly=[ly]

,@cjh=[cjh]

,@srz=[srz]

,@flh=[flh]

,@dph=[dph]

,@bz=[bz]

,@xpdx=[xpdx]

,@xpgs=[xpgs]

,@xpxs=[xpxs]

,@scrid=[scrid]

,@scr=[scr]

,@scsj=[scsj]

,@scbm=[scbm]

,@shr=[shr]

,@shsj=[shsj]

,@ecbz=[ecbz]

,@gdr=[gdr]

,@gdsj=[gdsj]

,@xgsj=[xgsj]

,@flag=[flag]

,@ysurl=[ysurl]

,@ysfile=[ysfile]

,@xgurl=[xgurl]

,@xgfile=[xgfile]

,@xwurl=[xwurl]

,@xwnr=[xwnr]

,@textall=[textall]

from ['+@tablename+N'] where id='+CAST(@t_id AS varchar(10))

exec sp_executesql @fei,

N'@tm varchar(500) OUT,

@jh int OUT,

@ajh int OUT,

@gjz varchar(100) OUT,

@sjms varchar(5000) OUT,

@fsdd varchar(100) OUT,

@fsrq nchar(10) OUT,

@zyrw varchar(1000) OUT,

@psz varchar(20) OUT,

@psrq nchar(10) OUT,

@tgz varchar(50) OUT,

@zrz varchar(50) OUT,

@sc nchar(4) OUT,

@ly varchar(8) OUT,

@cjh varchar(20) OUT,

@srz nchar(10) OUT,

@flh int OUT,

@dph nchar(10) OUT,

@bz varchar(500) OUT,

@xpdx bigint OUT,

@xpgs nchar(10) OUT,

@xpxs nchar(11) OUT,

@scrid int OUT,

@scr nchar(10) OUT,

@scsj datetime OUT,

@scbm int OUT,

@shr nchar(10) OUT,

@shsj datetime OUT,

@ecbz varchar(500) OUT,

@gdr nchar(10) OUT,

@gdsj datetime OUT,

@xgsj datetime OUT,

@flag nchar(1) OUT,

@ysurl varchar(100) OUT,

@ysfile varchar(250) OUT,

@xgurl varchar(100) OUT,

@xgfile varchar(250) OUT,

@xwurl varchar(500) OUT,

@xwnr varchar(5000) OUT,

@textall varchar(5000) OUT',

@tm  OUT,

@jh  OUT,

@ajh  OUT,

@gjz  OUT,

@sjms  OUT,

@fsdd  OUT,

@fsrq  OUT,

@zyrw  OUT,

@psz  OUT,

@psrq  OUT,

@tgz  OUT,

@zrz  OUT,

@sc  OUT,

@ly  OUT,

@cjh OUT,

@srz  OUT,

@flh  OUT,

@dph OUT,

@bz  OUT,

@xpdx  OUT,

@xpgs  OUT,

@xpxs  OUT,

@scrid  OUT,

@scr  OUT,

@scsj  OUT,

@scbm  OUT,

@shr  OUT,

@shsj  OUT,

@ecbz  OUT,

@gdr  OUT,

@gdsj  OUT,

@xgsj  OUT,

@flag OUT,

@ysurl OUT,

@ysfile  OUT,

@xgurl  OUT,

@xgfile  OUT,

@xwurl  OUT,

@xwnr  OUT,

@textall  OUT;

INSERT INTO [yx].[dbo].[S_del]

([t_id]

,[u_id]

,[u_t]

,[tm]

,[jh]

,[ajh]

,[gjz]

,[sjms]

,[fsdd]

,[fsrq]

,[zyrw]

,[psz]

,[psrq]

,[tgz]

,[zrz]

,[sc]

,[ly]

,[cjh]

,[srz]

,[flh]

,[dph]

,[bz]

,[xpdx]

,[xpgs]

,[xpxs]

,[scrid]

,[scr]

,[scsj]

,[scbm]

,[shr]

,[shsj]

,[ecbz]

,[gdr]

,[gdsj]

,[xgsj]

,[flag]

,[ysurl]

,[ysfile]

,[xgurl]

,[xgfile]

,[xwurl]

,[xwnr]

,[textall])

VALUES

(

@t_id,

@u_id,

@tablename,

@tm  ,

@jh  ,

@ajh  ,

@gjz  ,

@sjms  ,

@fsdd  ,

@fsrq  ,

@zyrw  ,

@psz  ,

@psrq  ,

@tgz  ,

@zrz  ,

@sc  ,

@ly  ,

@cjh  ,

@srz  ,

@flh  ,

@dph  ,

@bz  ,

@xpdx  ,

@xpgs  ,

@xpxs  ,

@scrid  ,

@scr  ,

@scsj  ,

@scbm  ,

@shr  ,

@shsj  ,

@ecbz  ,

@gdr  ,

@gdsj  ,

@xgsj  ,

@flag  ,

@ysurl  ,

@ysfile  ,

@xgurl  ,

@xgfile  ,

@xwurl  ,

@xwnr  ,

@textall

)

set nocount off

从企业管理器中直接导出来的,现在看看也没有什么难的哦,只是因为自己不熟悉,而使得自己在项目时间本来就是很紧张的情况下还因为这个而浪费了不少的时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值