如何将一个表中记录插入到另外一个表中?

烤火的鱼 2004-03-21 04:54:10
假如我有一个表,名为"在职人员",另外一个表为"离开人员",两个表的主键都是"序号",表结构几乎完全一样,只是"离开人员"中多了两个字段,一是离开时间,二是操作员,如果一个人员离开,我要将全部信息转移到"离开人员"表中,然后填写离开时间和操作员.我想这样处理,看行不行:
1、为保证操作正确,放到事务中完成,这样可以回滚,
2、由于两个表的主键字段都一样,首先将"在职人员"的该记录序号换成一个不可能用到的序号,如-10,我的表序号全部从1开始.
3、通过insert int语句将"在职人员"中该人的信息查询出来并添加到离开人员表中
4、删除在职人员中的信息
5、修改刚添加的记录的离开时间和操作员
6、将主键-10改成大于0的唯一合法主键
中间任何一个环节出错都可以回滚.

接下来我的问题就出现了:
1、能否省掉将主键转成-10这一步?因为在职人员表中该记录的主键可能和离开人员表中的已有主键一样,这样会冲突.
2、insert into 离开人员 (姓名,性别……) (select * from 在职人员 where 序号=-10)中,要指定姓名、性别,而该字段又特别多,如果表结构一改变,工作量比较大,能否有一个通配符如*之类的?
3、接上面的,还有类似的许多情况,都是将当前记录删除,添加到历年记录中,两个表的结构也仅是后一个表比前面一个表多两个字段而已,我想写成一个通用的储存过程,由应用程序传来表名,主键名,主键值就可以了.
4、将一个表中一条记录移动到另外一个表中的最佳作法?我上面的办法好象比较笨,注意,表的结构是未知的,但都是后一表比前一表多两个字段.
非常感谢,我已经想了很久了,想找到一个通用的做法,那就是写如下一个储存过程:
CREATE PROCEDURE u_DelToHistory
@strKeyField nvarchar(200),
@nKeyValue int,
@strTableName nvarchar(200),
@strHistoryTableName nvarchar(200),
@strReturn nvarchar(200) out
AS
……
由应用程序传来主键名、主键值、表名,该储存过程查询出主键对应的记录,然后在 历时记录表中插入该记录信息,并删除正式表中的信息,@strReturn 返回可能出现的错误会正确信息.谁能帮我实现一下,不胜感激.
...全文
300 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
烤火的鱼 2004-04-08
  • 打赏
  • 举报
回复
目前还没有找到一个好的解决方案
烤火的鱼 2004-03-22
  • 打赏
  • 举报
回复
up
烤火的鱼 2004-03-21
  • 打赏
  • 举报
回复
两个表一个是在职人员信息,另外一个是离开本公司人员信息,结构完全一样,只是在人员离开后要多两个字段,一是离开的时间,二是该数据库是由谁删除的.也就是将在职人员的信息转移到离职人员表中去.
ghostzxp 2004-03-21
  • 打赏
  • 举报
回复
你的序号是自己写的?
如果你用自增的就没问题了(设计表,将序号:标识 改成是)
你两个表序号好象没有实际用处
yixiu121 2004-03-21
  • 打赏
  • 举报
回复
Insert Into t1(....) from ()INSERT INTO archivetitles
(title_id, title, type, pub_id)
SELECT title_id, title, type, pub_id
FROM titles
WHERE (pub_id = '0766')

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧