SqlServer2008 带返回值的存储过程与Hibernate调用

本文介绍了如何在SQL Server 2008中创建带返回值的存储过程,并详细阐述了使用Hibernate在Java应用程序中如何有效地调用这些存储过程,包括传递参数及获取返回结果的方法。
摘要由CSDN通过智能技术生成

存储过程:

USE [aaa]
GO
/****** Object:  StoredProcedure [dbo].[John_getICMaxNum]    Script Date: 04/29/2014 11:05:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		John
-- Create date: 2014-04-29
-- Description:	取t_Organization和t_Item应该填入的最大值
--				step 1:	取到t_Organization和t_Item现有的最大值
-- =============================================
ALTER PROCEDURE [dbo].[John_getICMaxNum]
@fTableName varchar(100),
@maxid int out
AS
DECLARE 
@temp_id_1 int,
@temp_id_2 int
BEGIN
	if (@fTableName='t_item' or @fTableName='t_Item')
	begin
		--step 1:	取t_Organization和t_Item现有最大值
		select @temp_id_1=MAX(t3.FItemID) from (
			select MAX(t1.FItemID) as FItemID
			from t_Organization t1
			union
			select MAX(t2.FItemID) as FItemID
			from t_Item t2
		) t3;
		--step 2:	取ICMaxNum现有最大值
		SELECT @temp_id_2=FMaxNum 
		FROM ICMaxNum 
		where FTableName=@fTableName;
		--step 3:	判断@temp_id_1+1与@temp_id_2的大小
		if (@temp_id_1+1>@temp_id_2)
		begin
			update ICMaxNum set FMaxNum=@temp_id_1+1 where FTableName=@fTableName;
			set @maxid=@temp_id_1+1;
		end
		else if (@temp_id_1+1<=@temp_id_2)
		begin 
			set @maxid=@temp_id_2;
		end
	end
	else
	begin
		SELECT @temp_id_2=FMaxNum 
		FROM ICMaxNum 
		where FTableName=@fTableName;
		set @maxid=@temp_id_2;
	end
	select @maxid;
END


Hibernate调用:

	public Integer getICMaxNum(String fTableName) {
		StringBuffer temp_sb = new StringBuffer();
		temp_sb.append("DBCC DROPCLEANBUFFERS;  DBCC FREEPROCCACHE;  set nocount on;  begin transaction  begin declare @maxid int,@ftablename varchar(100); ");
		temp_sb.append("set @ftablename='"+fTableName+"'; ");
		temp_sb.append("exec John_getICMaxNum @ftablename, @maxid out; select @maxid; end  commit;");
		log.info(temp_sb.toString());
		Session session = this.sessionFactory.getCurrentSession();
		Query query = session.createSQLQuery(temp_sb.toString());
		List<Object> ol = query.list();
		if (ol!=null && ol.size()!=0){
			return Integer.valueOf(ol.get(0).toString());
		}
		return -1;
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值