动态复制一个表中一条数据到另一个表中(列不完全相同)(存储过程实现)

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:动态复制一个表中一条数据到另一个表中(列不完全相同)(存储过程实现)

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

因为要用到回收站功能,删除一条记录,要先放到一个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,
<a href="mailto:N%27@tm" target="_blank">N'@tm</a> 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

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

此条目发表在 SQL Server 分类目录。将固定链接加入收藏夹。

评论功能已关闭。