在SqlServer中复制表记录,复制报告

本文介绍了一个用于在SQL Server中复制报告数据的存储过程。该过程可以复制指定报告的所有基本信息,包括客户基本信息、检测项目、批次及费用等。通过输入旧报告编号和新报告编号作为参数,可以实现数据的快速复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

--作者:Ran(Sunday_hl)
--创建时间:2005-12-14
--实现功能:复制报告,主要复制客户基本信息,检测项目,批次,费用等信息
--参数说明:@old_accept_no被复制的编号,@new_accept_no新的受理

ALTER  Procedure copy_reports
    @old_accept_no  varchar(20),
    @new_accept_no  varchar(20)
AS
    --判断传入的老编号
    If @old_accept_no Is Null Or @old_accept_no = ''
    Begin
        RAISERROR ('被复制的编号不能为空。', 16, 1)
        Return -1;
    End
    --判断传入的新受理号
    If @new_accept_no Is Null Or @new_accept_no = ''
    Begin
        RAISERROR ('新的编号不能为空。', 16, 1)
        Return -2;
    End
    --判断新旧两个编号是否相同
    If @new_accept_no = @old_accept_no
    Begin
        RAISERROR ('新旧两个编号不能相同。', 16, 1)
        Return -3;
    End   
    --判断老的记录是否存在,这里只判断tb_base中的记录,其他的就不判断了
    If Not Exists(Select * From tb_base Where accept_no = @old_accept_no)
    Begin
        RAISERROR ('没有找到被复制的相关记录。', 16, 1)
        Return -4;
    End
    --判断新的记录是否存在,这里只判断tb_base中的记录,其他的就不判断了
    If Exists(Select * From tb_base Where accept_no = @new_accept_no)
    Begin
        RAISERROR ('基本信息表中包含了新的编号的相关记录了,请查实.', 16, 1)
        Return -5;
    End
--开始复制数据
Begin TransAction
    --复制基本信息tb_base
    If Exists(Select * From tb_base Where accept_no = @old_accept_no)
    Begin
        If object_id('tempdb.dbo.#tb_base_temp') Is not null
            Drop Table #tb_base_temp
        --把需要复制的相关记录保存到临时表中
        Select * Into #tb_base_temp
            From tb_base
            Where accept_no = @old_accept_no
         --这个是删除自动增加列,如果不删除会出错的
        Exec ('Alter Table #tb_base_temp Drop Column id ')
        --修改临时表中相关数据,使其符合新的记录要求,并要保证符合表中相关约束
        Update #tb_base_temp Set accept_no = @new_accept_no,flag = '0'
        --把修改好的临时表的数据插入到 表中
        Insert Into tb_base Select * From #tb_base_temp
        --出现错误就 跳转
        If (@@Error <> 0) GOTO err
    End
   ........................约..................................
--复制表1......
--复制表n......
   ........................约..................................

--提交事务,如果一个失败就回滚所有事务
    err:
    If @@Error = 0
        Commit TransAction
    Else
    Begin
        RollBack TransAction
        RAISERROR ('复制失败', 16, 3)
    End


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

//复制当前报告PB中调用

String ls_old_accept_no,ls_new_accept_no

ls_old_accept_no = is_accept_no
IF  ls_old_accept_no = "" OR IsNull(ls_old_accept_no) THEN RETURN

IF MessageBox("提示信息","您确认要复制‘" + ls_old_accept_no + "’此报告吗?",Question!,yesno!,1) <> 1 THEN RETURN

DECLARE Emp_proc PROCEDURE FOR dbo.copy_reports
    @old_accept_no = :ls_old_accept_no,
    @new_accept_no = :ls_new_accept_no output
    USING Sqlca;
   
EXECUTE Emp_proc;
FETCH  Emp_proc  INTO :ls_new_accept_no;
CLOSE  Emp_proc;

IF Sqlca.SQLCode = 100 OR Sqlca.SQLCode = 0 THEN
    COMMIT USING Sqlca;
    MessageBox("复制报告信息","复制成功!,新的编号为: '"+ls_new_accept_no+"'")
ELSE  
    MessageBox("复制报告错误信息",Sqlca.SQLErrText )
 ROLLBACK USING Sqlca;
END IF

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值