当前位置: 首页 > 编程日记 > 正文

存储过程中返回结果集

存储过程中返回结果
    从存储过程中返回结果有三种方式:
1、 返回结果集
这是客户端应用程序返回结果的最通用的方法。结果集是通过使用select语句选择数据产生的。结果集可以从永久表、临时表或局部变量中产生。将结果返回到另一个存储过程不是一种有效的方法。存储过程不能访问另一个存储过程建立的结果集。
例如从永久表中返回结果集:
use pubs
go
create procedure ap_createresultfrompermtable
as
select au_iname from authors
go
例如从局部变量中创建结果集:
use pubs
go
create procedure ap_createresultfromvariable
as
declare @au_iname char(20)
select @au_iname = au_iname from authors
where au_id = '172-32-1176’
select @au_id
go
2、 设置output参数的值
输出参数经常用来从存储过程中检索出结果。如果某个参数在传输到存储过程中时被定义成output,则对该参数的任何修改在退出存储之后仍然有效。
例如:
use pubs
go
create procedure ap_setoutputvar @count integer output
as
select @count = count(*) from authors
go
从输出参数中检索出值:
use pubs
go
create procedure ap_getoutputvar
as
declare @num integer
execute ap_setoutputvar @num output
print “the count is”+convert(char,@num)
go
· 将游标使用成output参数。游标可以使用output(输出)参数,但不能使用成输入参数。也就是说,游标可以作为结果返回,但却不能传输到过程中去。当游标被用作参数时,需要限定其为output和varying。varying关键字指出该结果集要用来支持输出参数。这样就提供了将结果集返回到调用过程的能力。
例如:
use pubs
go
create procedure gettitlecount @count_cursor cursor varying output
as
set @count_cursor = cursor
for
select au_id,count(*)
from titleauthors
group by au_id
open @count_cursor
go
3、 通过return参数返回状态
这是一种从存储过程返回错误码的方法。存储过程总是返回一个状态值,用户也可以使用return语句返回自己的状态。
例如:
use pubs
go
create procedure ap_setreturnstatus
as
declare @count integer
select @count = count(*) from authors
if @count = 0
return(1)
else
return (0)
go
例如检索出返回的状态:
use pubs
go
create procedure ap_getreturnstatus
as
declare @status integer
execute @status = ap_setreturnstatus
if @status = 1
print “no rows found”
else
print “successful”
go

在存储过程中进行错误处理
    如同其它程序一样,在存储过程中进行错误处理是非常重要的。系统变更@@error在执行每一个transact sql语句之后都会得到一个值。对于成功的执行,@@error的值为0,如果出现错误,则@@error中将包含错误信息。@@error系统变量对存储过程的错误处理是非常重要的。
    注意:为了防止错误,@@error所能设置的值在sysmessages表的“error”中反映了出来。
在存储过程中的错误有两种类型:
1、  数据库相关的错误
这些错误是由数据库的不一致性引起的,系统使用非0的@@error值表示特定的数据库问题。在transact sql执行之后,可以通过@@error获得所出现的错误。如果发现@@error不为0,则必须采取必要的行动,大多数情况下,存储将不再继续进行处理而返回。下面的示例展示了典型的获取数据库错误的方法。该过程将错误代码放置到输出变量中,这样,调用程序就能够访问到。
use pubs
go
create procedure ap_trapdatabaseerror @return_code integer output
as
update authors set au_iname = “jackson”
where au_iname = “smith”
if @@error <> 0
begin
    select @return_code = @@error
    return
end
else
    @return_code = 0
go
2、  业务逻辑错误
这些错误是由于违反了业务规则而引起的。要获取这些错误,首先需要定义业务规则,基于这些规则,需要在存储过程中增加必要的错误检测代码。人们经常使用raiserror语句通报这些错误。raiserror提供了返回用户定义错误及将@@error变量设置成用户定义错误号的能力。错误消息可以被动态地建立,或者基于错误号从“sysmessages”表中检索到。一旦出现了错误,错误就会以一种服务器错误消息的方式返回到客户机。下面是raiserror命令的语法:
raiserror (msg_id | msg_str, severity, state
[, argument ][,…n]])
[with options]
msg_id指明用户定义消息的id,该消息存储在“sysmessages”系统表中。
msg_str用于动态创建消息的消息字符串。这与c语言中的“printf”非常相似。
severity定义用户赋值的错误消息严重程度。
state是从1到127的任意整数值,它表示错误的调用状态信息。负数的state值将缺省为1。
options指明错误的定制选项。options的有效值如下:
1) log。
将错误记录到服务器错误日志和nt事件日志中。该选项需要消息带有从19到25的严重程度。而只有系统管理员才能发出这种消息。
2) nowait。
将消息立即发送到客户端服务器。
3) seterror。
不管其严重级别如何,将@@error的值设置为msg_id或5000。

远程过程调用
    sql server提供了调用驻留在不同服务器上的存储过程的能力。调用这样的存储过程称谓远程存储过程调用。为了使得调用能从一个sql server转移到另一个服务器,两个服务器应该相互定义成对方的有效远程服务器。
    设置远程服务器的配置:
    · 扩展某个服务器的组。
    · 右击该服务器并点击“properties”。
    · 设置选项“allow other sql servers to connect remotely to this sql server via rpc”。
    · 设置“query time out”选项的值,该值指定从一个查询处理返回所能等待的秒数。缺省值为0,表示允许无限的等待时间。
    · 设置完成配置选项之后,点击“ok”。
    · 重新启动服务器之后,修改将会生效。
    · 在另一台远程服务器上重复相同的步骤。
    调用远程存储过程需要指明服务器的名称,后带数据库的名称和拥有者的名称。下面是在不同的服务器(server2)上调用一个存储过程的示例。
exec server2.pubs.dbo.myproc

豆豆的后话:
    这里只是粗浅的介绍了sql server常用的知识,对象也是基于sql server数据库编写应用程序的编程人员,而非数据库管理者。但对于应用程序编程者,了解数据库的管理也是非常有用的。建议在以后的时间自行去了解数据库的管理,这对于优化程序也是相当有用的。
from:http://java.qingsoft.net/?action-viewthread-tid-519

转载于:https://www.cnblogs.com/no7dw/archive/2010/06/19/1760668.html

相关文章:

我的股票交易策略

投资股市已经成为我们进行资产配置的一个重要选择。在这个市场中主流的投资方式无外乎 价值投资 和 趋势投资 两种。价值投资需要了解各种财务指标来评价各支股票&#xff0c;在被市场低估时买入&#xff0c;在被市场高估时卖出。这对于非财务背景的人来说门槛偏高。趋势投资需…

你负责选歌,索尼负责用 AI 谱出风格相似的曲子

近日&#xff0c;索尼巴黎计算机科学实验室&#xff08;CSL&#xff09;正在开发一套算法系统 Flow Machines&#xff0c;该系统根据用户的品味谱写歌曲&#xff0c;其歌曲在迎合用户口味的基础上&#xff0c;适用于所有现有音乐风格。 技术人员搭建了一个拥有 13000 多首音乐的…

java培训:Java的十大算法

想要学好java语言&#xff0c;就要打好基础&#xff0c;java要学习的东西有很多&#xff0c;今天小编就来和大家说下java的十大算法。 算法一&#xff1a;快速排序算法 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下&#xff0c;排序 n 个项目要Ο(nlogn) 次比较。…

PetShop之表示层设计 - 《解剖PetShop》系列之六

六 PetShop之表示层设计 表示层&#xff08;Presentation Layer&#xff09;的设计可以给系统客户最直接的体验和最十足的信心。正如人与人的相交相识一样&#xff0c;初次见面的感觉总是永难忘怀的。一件交付给客户使用的产品&#xff0c;如果在用户界面&#xff08;User Inte…

物联网时代营销怎么做?

这几年和大数据、O2O一样热门的词还包括“物联网”&#xff0c; 物联网是新一代信息技术的重要组成部分&#xff0c;也是“信息化”时代的重要发展阶段。其英文名称是&#xff1a;“internet of things(IoT)”。顾名思义&#xff0c;物联网就是物物相连的互联网。 说的再通俗一…

怎样去掉 CSDN-Markdown 上传图片中的水印

自己一直使用 Markdown 写技术图文&#xff0c;我们知道在 Markdown 中插入图片需要这个图片的URL地址&#xff0c;那么必须得找一个图床来存放图片。 // Markdown 中插入图片的语法结构![这里写图片描述](这里写图片的URL地址) 我的方法是这样的&#xff1a;在 CSDN 上发一篇…

Python编程比较好的机构怎么选择

想要进入到IT行业&#xff0c;很多人的首要选择都是学习Python编程语言&#xff0c;因为Python编程语言入门是相对比较简单的&#xff0c;但是想要学好Python技术&#xff0c;找一个好的Python培训机构是非常重要的&#xff0c;那么Python编程比较好的机构怎么选择呢?来看看下…

赚钱是刚需,如何正确的交易股票?

试着考虑下面这些情景&#xff1a; 听隔壁老王说&#xff0c;最近股市行情不错&#xff0c;自己也想买点股票&#xff0c;但不知道该买那支&#xff1f;犹犹豫豫到处打听消息。 买入一支股票后&#xff0c;时不时就会拿出手机看看它的价格&#xff0c;有时候甚至一天要看很多…

C# Windows CE使用小技巧实例

C# Windows CE使用的一些感受&#xff1a;使用Windows的开发机上用C#启动一个外部程序的方法有很多&#xff0c;但这些方法用在使用WinCE的目标工控机上都无能为力。 C# Windows CE使用1、 现在以打开一个IE为例&#xff0c;介绍如何在WinCE下使用C#来打开一个外部文件&#xf…

Ovirt 安装部署方法

官方的安装文档&#xff1a;http://www.ovirt.org/documentation/install-guide/Installation_GuideOvirt note 系统镜像的下载&#xff1a;http://www.ovirt.org/download http://mirror.isoc.org.il/pub/ovirt/ovirt-4.1/iso/ovirt-node-ng-installer-ovirt/4.1-2017072816/…

零基础如何选择适合的Java培训课程

很多人都想要学习java技术&#xff0c;但是害怕自己是零基础学不好&#xff0c;所以想要找专业的java培训机构进行学习&#xff0c;但是零基础如何选择适合的Java培训课程成了他们比较头疼的事情&#xff0c;下面小编就为大家做下详细的介绍。 ​  零基础如何选择适合的Java培…

Android Intent的几种用法全面总结

Android Intent的几种用法全面总结 Intent, 用法Intent应该算是Android中特有的东西。你可以在Intent中指定程序要执行的动作&#xff08;比如&#xff1a;view,edit,dial&#xff09;&#xff0c;以及程序执行到该动作时所需要的资料。都指定好后&#xff0c;只要调用startAct…

七天学会「股票数据分析软件」的开发(中)

两天前&#xff0c;我写了 七天学会「股票数据分析软件」的开发&#xff08;上&#xff09;&#xff0c;号召大家尝试着写写代码&#xff0c;不知道大家进度如何。 如果存在掌握一种技能的刚需&#xff0c;而且知道正确的学习方法&#xff0c;经过刻意练习&#xff0c;这门技能…

《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一1.1 生成执行计划

1.1 生成执行计划 在Oracle中&#xff0c;任何一条语句在解析过程中都会生成一个唯一的数值标识&#xff0c;即SQL_ID。而同一条语句&#xff0c;在解析过程中&#xff0c;可能会因为执行环境的改变&#xff08;例如某些优化参数被改变&#xff09;而生成多个版本的游标&#…

软件测试培训:高薪测试技术要掌握哪些

职业技能一 1. 软件测试&#xff1a; 1) 熟练灵活地运用等价类、边界值、判定表法、因果图法等各种方法设计测试用例&#xff0c;包括单元测试、集成测试、系统测试用例设计。 2) 牢固掌握了软件测试计划、测试日报、测试报告的写作方法与要领。 3) 针对B/S、C/S架构及不同…

MFC-4简单的窗口重绘(非部分重绘)

#include <afxwin.h> #include "resource.h" #include <afxtempl.h> //定义模板类的头文件class MyDocument : public CDocument { public:CArray<CPoint,CPoint &> pArray;//<保存的数据类型,读取保存数据类型的返回值>void AddPoint…

七天学会「股票数据分析软件」的开发(下)

昨天下午把《我不是药神》这部电影看了&#xff0c;搞得我哭的稀里哗啦&#xff0c;里面有一些情节触痛了内心中最薄弱的地方。药厂没有错&#xff0c;他们要收回前期投入的研发成本。主人公 程勇 只能算是整个事件的牺牲品&#xff0c;通过他的牺牲让国家关注到白血病人这个群…

那些对混合云开发和应用程序环境的错误认识

企业架构师们在开发混合云计算应用程序并为支持程序云计算而选择云计算供应商之前&#xff0c;他们应当好好完成他们的准备工作。选择错误的供应商和在错误的环境中开发应用程序都会对应用程序的运行性能、工作流程、变更成本、以及与客户的沟通和交易带来负面影响。 在本文中&…

2021年UI设计培训机构哪个好

想要学好UI设计&#xff0c;选择报一个专业的UI设计培训机构是非常明智的选择&#xff0c;为什么这么说呢?因为培训机构的课程都是根据当下的行业环境制作出来的&#xff0c;而且有专业老师&#xff0c;比自学要好很多&#xff0c;那么在2021年UI设计培训机构哪个好呢?来看看…

UVA 116 Unidirectional TSP DP

题目链接&#xff1a; https://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&category3&pageshow_problem&problem52 题目描述&#xff1a; 一个整数矩阵&#xff0c; 求第一列到最后一列的最小整数和&#xff0c; 只能从第一列出发向右&…

C++ 数据类型转换

wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....#include <string>// 使用CString必须使用MFC&#xff0c;并且不可包含<windows.h>#define _AFXDLL#include <afx.h>using namespace std;//-----------------------…

如何准备数学建模竞赛!

昨天早晨&#xff0c;我到教十一实验室的时候遇到史会峰老师&#xff0c;他说正准备给学生们进行数学建模的培训。今天早晨&#xff0c;我又遇到了孔令才老师&#xff0c;他同样也说准备给学生们进行数学建模的培训。看到这么多同事在做这个事情&#xff0c;想想自己也应该贡献…

UI设计培训:UI设计师离不开的基本版式设计

不管你是UI设计&#xff0c;还是工业设计&#xff0c;甚至动画设计&#xff0c;终究离不开基本的版式设计&#xff0c;所以版式设计这块非常考验设计师的基础功力。 1. 大且醒目&美观的排版设计 版面设计大概是一位设计师重要的部分&#xff0c;今年的版面设计会围绕着大且…

我对她说,你能不能换件衣服?换种心情?换种脾气?她说,可以,换个人就行了···...

我跟她说&#xff0c;你能不能换件衣服?换种心情?换种脾气?她说&#xff0c;可以&#xff0c;换个人就行了转载于:https://www.cnblogs.com/yangzhong/archive/2010/07/06/1772124.html

如何通过代码连接SQL Server数据库

我们曾经为南方电网做过几个有关架空线路的科技项目&#xff0c;要趁着假期有整段的空闲时间&#xff0c;把这些代码整理一下&#xff0c;放入团队刚刚重构的代码库中。 由于这些项目使用的数据库为 SQL Server&#xff0c;所以在整理代码之前需要解决两个问题&#xff1a; 把…

选择一个稳定、快速的服务器四大注意事项

要想运营好一个网站&#xff0c;稳定和高速的服务器是必不可少的。可是在选择的时候企业就会很发愁&#xff0c;不知道该考虑哪些因素&#xff0c;不知道该怎么选择&#xff0c;下面我们简单的了解一下如何选择一个稳定性好、快速的服务器。 第一 性能要稳定 为了保证网站能够正…

APP不同上线情况对应的测试流程

一个App软件从研发提测到版本上线都会经过哪些测试流程呢?很多人认为就是进行功能测试&#xff0c;没bug了就提交审核&#xff0c;审核通过就直接上线了&#xff0c;其实不然&#xff0c;有些步骤是需要特别关注的&#xff0c;否则极易造成线上bug&#xff0c;本文千锋教育小编…

iOS 进阶—— iOS内存管理

1 似乎每个人在学习 iOS 过程中都考虑过的问题 alloc retain release delloc 做了什么?autoreleasepool 是怎样实现的?__unsafe_unretained 是什么?Block 是怎样实现的什么时候会引起循环引用&#xff0c;什么时候不会引起循环引用?所以我将在本篇博文中详细的从 ARC 解释到…

Google工作原理

今天在晚上看到一个图&#xff0c;讲解google的工作原理&#xff0c;感觉写的不错。贴过来方便以后深入的研究。 转载于:https://www.cnblogs.com/muyuge/archive/2010/07/06/6152590.html

如何利用ArcGis修改shp数据字段名称

最近在处理一批地理信息数据&#xff0c;其中涉及到对shp文件属性字段的修改&#xff0c;在这里做个记录&#xff0c;以防大家再走弯路。 工具&#xff1a; Arcgis软件shp文件 第1步&#xff1a;打开ArcCatalog&#xff0c;选择左上角的链接文件夹&#xff0c;选择你存放数据…