存储过程执行发生错误问题 100xuejiecn]

发布时间:2016-12-6 20:18:07 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"存储过程执行发生错误问题 100xuejiecn]",主要涉及到存储过程执行发生错误问题 100xuejiecn]方面的内容,对于存储过程执行发生错误问题 100xuejiecn]感兴趣的同学可以参考一下。

再发一技术帖,虽说不怎么技术。呵呵 曾经想起一个问题,存储过程执行过程中发生错误时,有说继续执行,有说中断。试了下,有些错误是中断执行的。如数据类型错误,后面的语句就不执行了。有些是可以继续执行的,如被 零除错误,还可以执行后面的语句。有谁知道哪些错误会中断执行,哪些会继续执行吗?记得在6.5的时候,好象可以设置一个什么选项,时间久远,忘记了。 看了些快照的资料。总算明白了,所谓快照,就是建立快照后,没有改变的数据在数据库原来的存储位置上,有数据发生改变时,将改变前数据存储到快照文件中。和其它数据库访问没什么区别。 对数据库镜像,数据库复制,快照,联合服务器等都可以解决哪些问题,也可以一并在此帖发表一下看法。

具体点

涉及面好广啊

学习 

好像还没有遇到过不继续执行的,除非错误级别很高时甚至会中断连接。

此贴学习

最好举个例子。

广!一般用于记账的过程需要有事务控制和锁锁,rollback tran,

里面再写个事务  发生错误就rollback transaction 再重新开启下事务(begin transaction) 应该就可以执行下面的语句了    试试吧

1、存储过程执行。什么错误会中断执行,什么错误会继续执行? 2、数据库镜像,复制,联合服务器,快照等各自的作用。 只是概略就行,不需要细节。细节,象SQL语法,就可以去看帮助了。

数据库镜像相当于2台服务器提供容错功能,其实原理是进行日志文件的复制及恢复操作保持数据的同步 ,一般镜像服务2台服务器即可,但出现故障需要手动进行切换,如果增加一台见证服务器就形成了自动切换 的功能,见证服务器的自动切换操作一般在10秒内完成,所以对用户来所感觉不到任何异样。

引用 8 楼 jayqean 的回复:里面再写个事务  发生错误就rollback transaction 再重新开启下事务(begin transaction) 应该就可以执行下面的语句了   试试吧呵呵,支持!没有这些过程有何用!嘻嘻

数据库快照的:(CSDN上讲的还可以) http://dev.csdn.net/author/bobo1394/436b5255c2c54f0a8923321109436db1.html

复制的太多 楼主自己去查一下

强烈学习

是中断执行的,我试过了。就是上面举的例子。如给日期型数据赋为数字值,后面的就不执行了。我想知道什么时候中断,什么时候执行。以前记的有个选项可以设置的,但记不清楚了。 关于其他,是不是可以用自己的话描述一下。如快照,我的理解是 定义:为数据库提供静态只读视图。 实现:建立快照后,没发生的数据,直接访问数据库文件。发生改变的数据,在数据改变前,将数据写入快照文件。快照=未改变的源数据文件和存放于快照文件中发生改变前的数据两部分组成。因此,当源数据库不可用时,快照数据库也就随之不可用了。 用途:只读报表,快复恢复用户错误,做测试数据库用 限制:必须和源数据库在同一服务器上或相应的镜像服务器上,镜像必须是完全同步镜像。 创建:create database ... as snapshot of dbname 删除:drop database  查询:与变通数据库相同 ....

顶下。。。

SET ARITHABORT { ON | OFF }

SET ARITHABORT 在查询执行过程中发生溢出或被零除错误时,终止查询。 数据类型转换错误呢?

create procedure TestProc as   --update Orders set OrderDate='345' where EmployeeID=4  declare @i int  select @i=4/0 if(@@ERROR<>0)   print '有错误发生!' --select * from orders  update Orders set OrderDate=GETDATE() where EmployeeID=4 有意者可对上面的存储过程测试一下。northwind数据库

上面这句和注释掉的这句,效果是不一样的。

学习了

--楼主帮试一下,下面语句返回的是0还是1 SET ARITHABORT ON SELECT DATABASEPROPERTYEX(DB_NAME(),'IsArithmeticAbortEnabled')

xuexi

引用 22 楼 csdyyr 的回复:SQL code--楼主帮试一下,下面语句返回的是0还是1SET ARITHABORTONSELECT DATABASEPROPERTYEX(DB_NAME(),'IsArithmeticAbortEnabled') 0

引用 24 楼 xuejiecn 的回复:引用 22 楼 csdyyr 的回复:  SQL code--楼主帮试一下,下面语句返回的是0还是1SET ARITHABORTONSELECT DATABASEPROPERTYEX(DB_NAME(),'IsArithmeticAbortEnabled')  0 为什么呢?ARITHABORT设为ON,应该返回1才对吧,还是我理解错了?

我设置了,可无论如何都是0,我也搞不懂。

但再次执行存储过程时,确实是中断了。 但不知道其它的错误能控制吗? 这和ANSI_WARNINGS选项还有关系的。

但再次执行存储过程时,确实是中断了。 但不知道其它的错误能控制吗? 这和ANSI_WARNINGS选项还有关系的。

学习

SQL Server 中的故障转移群集为整个 SQL Server 实例提供高可用性支持。例如,您可以将故障转移群集的一个节点上的 SQL Server 实例配置为在发生硬件错误、操作系统错误或计划升级时故障转移到此群集中的任何其他节点。 故障转移群集是一个或多个节点(服务器)与两个或多个共享磁盘的组合,即资源组。资源组(包括其网络名称)和一个 Internet 协议 (IP) 地址组合在一起,构成了称为“故障转移群集或故障转移群集实例”的群集应用程序或群集服务器。SQL Server 故障转移群集出现在网络中时就像是单台计算机一样,但是它具有一种功能,能够在当前节点不可用时从一个节点故障转移到另一个节点。故障转移群集出现在网络中时就像一个普通应用程序或单台计算机一样,但是它具有可提高可用性的其他功能。 对于 SQL Server 2008 中的所有安装方案,故障转移群集都具有一个新的体系结构和新的工作流。两个安装选项是集成安装和高级/企业安装。集成安装将创建并配置一个单节点 SQL Server 故障转移群集实例。其他节点是使用安装程序中的添加节点功能添加的。例如,对于集成安装,您运行安装程序以创建一个单节点故障转移群集。然后,您再次为要添加到群集的每个节点运行安装程序。高级/企业安装包括两个步骤。准备步骤准备要运行的故障转移群集的所有节点。节点是在此初始步骤中定义并进行准备的。准备节点之后,将在活动节点(即具有共享磁盘的节点)上运行完成步骤,以完成故障转移群集实例并使其能够运行。

USE pubs GO /*检查数据库选项是否开启 SELECT DATABASEPROPERTYEX(DB_NAME(),'IsAnsiWarningsEnabled') SELECT DATABASEPROPERTYEX(DB_NAME(),'IsArithmeticAbortEnabled') */ CREATE TABLE TB(COL TINYINT) GO ALTER DATABASE pubs SET ANSI_WARNINGS OFF GO ALTER DATABASE pubs SET ARITHABORT OFF GO --1, 两个选项都设为ON或OFF, 都没有中断执行,事务成功提交。--这个不明白,貌似设置系统选项不起作用??? BEGIN TRAN     INSERT TB SELECT 1     SELECT COL/0 FROM TB --除零错     --INSERT TB SELECT 256    --溢出     PRINT 'ERROR' COMMIT TRAN /* (1 row(s) affected) Server: Msg 8134, Level 16, State 1, Line 4 Divide by zero error encountered. ERROR */ SELECT * FROM TB /* COL          -----------  1 */ --2,  两个选项都设为ON或OFF, 数值类型错误,执行中断, 回滚被事务 BEGIN TRAN     INSERT TB SELECT 1     UPDATE TB SET COL='A'     PRINT 'ERROR' COMMIT TRAN /* (1 row(s) affected) Server: Msg 245, Level 16, State 1, Line 1 Syntax error converting the varchar value 'A' to a column of data type tinyint. */ SELECT * FROM TB /* COL   ----  (0 row(s) affected) */ DROP TABLE TB

两个选项是想到影响的。 类型错误是中断的,但被 零除的错误默认情况下不中断,可以得到@@error值,而类型错误执行直接 就终止了。

上一篇:求与ORACLE中的LAG函数等价的SQL2005函数 20javawhy]
下一篇:MSSQL 新特性 100xuejiecn]

相关文章

相关评论