当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:21:00  来源:本站整理

SQL Server 7.0 入门(八)[MSSQL防范]

赞助商链接



  本文“SQL Server 7.0 入门(八)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
存储历程中返回后果
从存储历程中返回后果有三种方法:
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数据库编写利用程序的编程人员,而非数据库管理者.但关于利用程序编程者,理解数据库的管理也是非常有效的.倡议在今后的时间自行去理解数据库的管理,这关于优化程序也是相当有效的.


————————全文完—————————   以上是“SQL Server 7.0 入门(八)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • Windows 搭配 IIS7 PHP MySQL 环境
  • sqlserver索引的原理及索引成立的注意事项小结
  • SQL Join的一些总结(实例)
  • SQL的Join利用图解教程
  • SQL中JOIN和UNION辨别、用法及示例介绍
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .