标签归档:存储过程

mssql sqlserver 存储过程返回数据的三种方法分享


摘要:
我们深知”存储过程”是一个sql代码块集合,里面包含大量的逻辑,存储过程常用于事务操作,数据查询等数据操作,下文将讲述如何获取存储过程的返回值呢?如下所示;
实验环境:sql server 2008 R2


存储过程返回数据三种方法说明

1.output输出参数的方式
此值是将结果放入参数中,然后output
2.return返回值的方式
此返回值只可返回一个整数
3.select输出结果集合的方式
此方式是采用select返回table的方式返回结果集给用户
———-存储过程三种返回值方式优缺点——-
select 可返回大量数据及多个集合,但会消耗大量的服务器资源
RETURN 返回数据非常有限就一个整型,只用于一些特殊状态值返回
OUTPUT 可返回多个数据,对服务器资源占用不大,非查询类业务建议使用此方式

存储过程返回数据举例说明

   if exists (select null from 
  sysobjects where xtype='p'
  and name ='pr_maomaoTest'
)
begin
  drop proc pr_maomaoTest 
end
go

create proc pr_maomaoTest
  @keyId int,
  @infoA varchar(20) output,
  @infoB varchar(20) output
as
begin
   ---select返回结果
   select @keyId as 'A'

   ---对output设置返回值
   set @infoA ='sqlServer'
   set @infoB ='maomao365.com'

   ---使用return 设置返回值
   return 8

end
go

---应用测试
declare @return int 
declare @A varchar(20)
declare @b varchar(20)


declare @keyId int 
set @keyId =8989

exec @return = 
  pr_maomaoTest
   @keyId = @keyId,@infoA= @A output,@infoB = @B output 

---返回值测试
print '---return'
print @return
print '---outPut'
print @A 
print @B 
mssql_sqlserver_存储过程返回值的三种方法分享

mssql_sqlserver_存储过程返回值的三种方法分享

mssql sqlserver存储过程通用模板


摘要:
下文讲述一个通用的sqlserver存储过程模板,此模块中讲述了关于异常的捕捉和处理,
以及存储过程事务的用法,如下所示:


CREATE proc[dbo].[pr_moBan]
(
	@param_In   参数类型, --传入参数
        ....
	@param_Out  参数类型 OUTPUT --输出参数
)
AS
BEGIN
	SET NOCOUNT ON;

	DECLARE @procStartTime   DATETIME
	DECLARE @procRunAllTime  INT
 
	DECLARE @error INT ---运行状态 不等于,则代表运行出错
	DECLARE @RowCount INT --上一条脚本影响的行数
	 
	DECLARE @errorMsg  NVARCHAR(2000)

	--变量赋值
	SET @procStartTime   = GETDATE()
	SET @error  = 0
	
	 

	 --开启事务
	 BEGIN TRAN
	 BEGIN TRY

	 /*
         脚本运行 
        */
        set @error =@@error;set @RowCount =@@rowCount
	 --脚本运行总时长
	 SET @procRunAllTime  =datediff(second,@procStartTime   ,getdate());

	 END TRY
	 BEGIN CATCH

	IF @@TRANCOUNT > 0
	BEGIN
		ROLLBACK TRAN
	          SELECT @errorMsg='运行出错:'+CAST(ERROR_NUMBER() AS VARCHAR)+','+ERROR_MESSAGE() 
	END

	END CATCH

	IF @@TRANCOUNT > 0 AND @error = 0  
	BEGIN
		COMMIT TRAN;
	END

	IF @@TRANCOUNT > 0 AND @error <> 0
	BEGIN
		ROLLBACK TRAN;
	END

 
        ---插入存储过程运行日志
        ****

	END
go

mssql sqlserver sql脚本如何使用存储过程返回的结果集呢?


摘要:
下文讲述sql脚本中使用存储过程返回结果集的方法分享,如下所示:
实验环境:sql server 2008 R2


在sql脚本中,如果需接收存储过程返回结果集,那么我们可以定义一个临时数据表(临时数据表的列名和存储过程返回列一致即可),如下所示:

 create proc pr_maomao365
as
select 1 as a 

select 2 as b 

select 3 as c
go


create table #t(keyId int )
go
---将存储过程返回结果集插入临时表中
insert into  #t (keyId) exec pr_maomao365 

select*   from  #t
go 
drop  table #t 
drop proc pr_maomao365


注意事项:
1.如果返回结果集存在多个时,每个结果集中的列类型和列条数需一致
2.多个结果集都会依次插入之临时表中