SQLServer7.0入门(八),第1张

SQLServer7.0入门(八),第2张

在存储过程中返回结果
从存储过程返回结果有三种方法:
1 .返回结果集
这是客户端应用程序返回结果的最常用方法。结果是通过使用SELECT语句选择数据而生成的。结果可以从永久表、临时表或局部变量中生成。将结果返回到另一个存储过程不是有效的方法。一个存储过程不能访问由另一个存储过程创建的结果集。
例如,从永久表返回结果集:
使用PUBS
GO
创建过程AP _ CREATE ResultFromTable
AS
SELECT AU _ INAME FROM Authors
GO
例如,从局部变量创建结果集:
使用PUBS
GO
创建过程AP _ CREATE RESULTS FROM variable
AS
DECLARE @ AU _ AS设置输出参数的值
Output parameter如果一个参数在传递到存储过程时被定义为OUTPUT,那么对该参数的任何修改在退出存储过程后仍然有效。
例如:
使用PUBS
GO
CREATE PROCEDURAP _ setup var @ COUNT INTEGER OUTPUT
AS
SELECT @ COUNT = COUNT(*)FROM authors
GO
USE pubs
GO
createprocedureap _ get OUTPUT var
AS
declare @ num INTEGER
游标可以使用输出参数,但不能用作输入参数。也就是说,游标可以作为结果返回,但不能传递给过程。当游标用作参数时,需要将其定义为输出和变化。VARYING关键字指示结果集将用于支持输出参数。这提供了将结果集返回给调用过程的能力。
例如:
使用PUBS
GO
创建过程GetitleCount @ count _ cursor将输出
更改为
Set @ count _ cursor = cursor
For
select au _ id,count(*)
from title authors
group by au _ id
open @ count _ cursor
GO[/br存储过程始终返回一个状态值,用户也可以使用返回
例如:
使用PUBS
GO
CREATE PROCEDURAP _ SETURN STATUS
AS
DECLARE @ COUNT INTEGER
SELECT @ COUNT = COUNT(*)From authors
IF @ COUNT = 0
return(1)
ELSE
return(0)
GO
例如,检索返回的状态:
USE PUBS

存储过程中的错误处理
和其他程序一样,存储过程中的错误处理非常重要。在执行每个Transact SQL语句后,系统更改@@error将获得一个值。为了成功执行,@@error的值为0。如果有错误,@@error将包含错误信息。@@error系统变量对于存储过程的错误处理非常重要。
注意:为了防止出错,可以由@@error设置的值反映在sysmessages表的“error”中。
存储过程中有两种类型的错误:
1。数据库相关错误
这些错误是由数据库的不一致性引起的。系统使用除0以外的@@error值来表示特定的数据库问题。执行Transact SQL后,可以通过@@error得到错误。如果发现@@error不为0,则必须采取必要的措施。在大多数情况下,存储将不会继续处理,并将返回。以下示例显示了获取数据库错误的典型方法。该过程将错误代码放在输出变量中,以便调用程序可以访问它。
USE pubs
GO
CREATE PROCEDURE AP _ trapdatabase error @ Return _ code integer OUTPUT
AS
UPDATE authors SET au _ iname = " Jackson "
其中au _ iname = " Smith "/br/]IF @ @ error 0
BEGIN
SELECT @ Return _ code = @ @ error
Return
end
else
@ Return _ code = 0[]要获得这些错误,首先需要定义业务规则。基于这些规则,您需要在存储过程中添加必要的错误检测代码。人们经常使用RAISERROR语句来报告这些错误。RAISERROR提供了返回用户定义的错误并将@@error变量设置为用户定义的错误号的能力。可以根据错误号从“sysmessages”表中动态建立或检索消息。一旦出现错误,就会以服务器错误消息的形式返回给客户端。以下是RAISERROR命令的语法:
raiserror (msg _ id | msg _ str,severity,state
[,argument] [,…n]]]
[with options]
msg _ id表示用户定义的sysmessages的id。
Msg_str用于动态创建消息的消息字符串。这和C语言中的“printf”很像。
Severity定义用户指定的错误消息的严重程度。
State是1到127之间的任意整数值,表示错误的呼叫状态信息。负数的状态值默认为1。
OPTIONS表示错误的自定义选项。选项的有效值如下:
1) LOG。
在服务器错误日志和NT事件日志中记录该错误。该选项要求消息的严重性为19到25。只有系统管理员可以发送此消息。不要等待.
立即将消息发送到客户端服务器。设置错误.
无论其严重性如何,都将@@error的值设置为msg_id或5000。

远程过程调用
SQL Server提供了调用驻留在不同服务器上的存储过程的能力。调用这样的存储过程称为远程存储过程调用。为了将调用从一个SQL Server转移到另一个SQL Server,这两个服务器应该被定义为彼此的有效远程服务器。
设置远程服务器的配置:
…展开服务器组。
…右键单击服务器,然后单击“属性”。
…设置选项“允许其他SQL server通过RPC远程连接到此SQL server”。
…设置“查询超时”选项的值,该值指定等待查询返回的秒数。默认值为0,这意味着允许无限的等待时间。
…设置配置选项后,单击“确定”。
…重新启动服务器后,修改才会生效。
…在另一台远程服务器上重复相同的步骤。
要调用远程存储过程,您需要指明服务器的名称,然后是数据库的名称和所有者的名称。以下是在不同服务器(Server2)上调用存储过程的示例。
Exec server 2 . pubs . dbo . my proc

豆豆后记:
这里只是粗浅的介绍一下SQL Server的常识。对象也是基于SQL Server数据库编写应用程序的程序员,而不是数据库管理人员。但是对于应用程序员来说,了解数据库管理也是非常有用的。建议以后学习一下数据库的管理,对优化程序也挺有用的。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQLServer7.0入门(八)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情