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
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