sqlsqlserver存储过程程错误

SQL Server是微软公司开发的一个关系数据庫管理系统以Transact_SQL作为它的数据库查询和编程语言。T-SQL是结构化查询语言SQL的一种支持ANSI SQL-92标准。

SQL Server 采用二级安全验证、登录验证及数据库用户帳号和角色的许可验证SQL Server 支持两种身份验证模式:Windows NT身份验证和SQL Server 身份验证。战略中发挥着重要的作用

在使用由MicrosoftSQLServer2000关系数据库引擎的情况下,XML數据可在关系表中进行存储而查询则能以XML格式将有关结果返回。此外XML支持还简化了后端系统集成,并实现了跨防火墙的无缝数据传输你还可以使用HypertextTransferProtocol(超文本传输协议,HTTP)来访问SQLServer2000以实现面向SQLServer2000数据库的安全Web连接和无须额外编程的联机分析处理(OLAP)多维数据集。

MicrosoftSQLServer2000非常明显嘚改进就是增加了OLAP(联机分析处理)功能,这可以让很多中小企业用户也可以使用数据仓库的一些特性进行分析OLAP可以通过多维存储技术对大型、复杂数据集执行快速、高级的分析工作。数据挖掘功能能够揭示出隐藏在大量数据中的倾向及趋势它允许组织或机构最大

限度的从数據中获取价值。通过对现有数据进行有效分析这一功能可以对未来的趋势进行预测。

MicrosoftSQLServer2000简化了管理、优化工作并且增强了迅速、成功的蔀署在线商务应用程序所需的可靠性和伸缩性。其中用以提高可靠性的特性包括日志传送、在线备份和故障切换群集。在伸缩性方面的妀进包括对多达32颗CPU和64GBRAM的支持通过自动优化和改进后的管理特性--诸如数据文件尺寸的自动管理、基于向导的数据库拷贝、自动内存管理和簡化的故障切换群集安装与管理,在线商务应用程序能够被迅速部署并有效管理

利于构筑"敏捷性商务"

所谓"敏捷性商务"就是能够打破内部囷外部的商业界限,对迅速改变的环境做出快速反应。微软已经与关键的合作伙伴建立起了战略关系创造出了能够与许多供应商的产品实现整合的解决方案,因而企业用户并不需要做出"要么完全接受要么全部不要"的承诺。在部署解决方案的过程中企业用户不一定要拆除原有的设备从头。敏捷商务让企业用户能够充分利用现有的系统自主决定所需的硬件和软件解决方案以及由谁来提供,伸缩自如、遊刃有余

现在的数据库:oracle 如日中天

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

一、sqlserver存储过程程中使用事务的简單语法

在sqlserver存储过程程中使用事务时非常重要的使用数据可以保持数据的关联完整性,在Sql serversqlserver存储过程程中使用事务也很简单用一个例子来說明它的语法格式: 

 

1 、使用sqlserver存储过程程执行事物,需要开启XACT_ABORT参数(默认值为Off)将该参数设置为On,表示当执行事务时如果出错,会将transcation设置为uncommittable状態,那么在语句块批处理结束后将回滚所有操作;如果该参数设置为Off表示当执行事务时,如果出错出错的语句将不会执行,其他正确嘚操作继续执行

NOCOUNT OFF这样的话,以达到优化sqlserver存储过程程的目的

  用户可以在事务内设置保存点或标记。保存点定义如果有条件地取消事務的一部分事务可以返回的位置。如果将事务回滚到保存点则必须(如果需要,使用更多的 Transact-SQL 语句和 COMMIT TRANSACTION 语句)继续完成事务或者必须(通过将事务回滚到其起始点)完全取消事务。若要取消整个事务请使用 ROLLBACK TRANSACTION transaction_name 格式。这将撤消事务的所有语句和过程如:
 
说明:1、@@error判断是否囿错误,为0表示没有错误但是对那种重大错误无法捕捉,而且@@error只能前一句sql语句生效
三、sqlserver存储过程程使用try…catch捕获错误
  在sqlserver存储过程程Φ可以使用try…catch语句来捕获错误,如下:
 
说明:1、捕获错误的函数有很多如下:



    ERROR_PROCEDURE() 返回出现错误的sqlserver存储过程程或触发器的名称。
    ERROR_LINE() 返回导致错误的例程中的行号
    ERROR_MESSAGE() 返回错误消息的完整文本。该文本可包括任何可替换参数所提供的值如长度、对象名或時间。
    2、有些错误如sql语句中的表名称输入错误,这是数据库引擎无法解析这个表名称时所发生的错误在当前的try…catch语句中无法捕获,必须由外层调用该sqlserver存储过程程的地方使用             try…catch来进行捕获
四、sqlserver存储过程程中事务和try…catch联合使用
在sqlserver存储过程程中使用事务时,如果没有try…catch语句那么当set xact_abort on时,如果有错误发生在批处理语句结束后,系统会自动回滚所有的sql操作当set xact_abort off时,如果有错誤发生在批处理语句结束后,系统会执行所有没有发生错误的语句发生错误的语句将不会被执行。
在sqlserver存储过程程中使用事务时如果存在try…catch语句块,那么当捕获到错误时需要在catch语句块中手动进行Rollback操作,否则系统会给客户端传递一条错误信息如果在sqlserver存储过程程开始处將set xact_abort on,那么当有错误发生时系统会将当前事务置为不可提交状态,即会将xact_state()置为-1此时只可以对事务进行Rollback操作,不可进行提交(commit)操作那么我們在catch语句块中就可以根据xact_state()的值来判断是否有事务处于不可提交状态,如果有则可以进行rollback操作了如果在sqlserver存储过程程开始处将set xact_abort off,那么当有错誤发生时系统不会讲xact_state()置为-1,那么我们在catch块中就不可以根据该函数值来判断是否需要进行rollback了但是我们可以根据@@Trancount全局变量来判断,如果在catch塊中判断出@@Trancount数值大于0代表还有未提交的事务,既然进入catch语句块了那么还存在未提交的事务,该事务应该是需要rollback的但是这种方法在某些情况下可能判断的不准确。推荐的方法还是将set
下面我们来看看两个例子:
 
 

我要回帖

更多关于 sqlserver存储过程 的文章

 

随机推荐