问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql server 存储过程

发布网友 发布时间:2022-04-10 19:21

我来回答

2个回答

热心网友 时间:2022-04-10 20:50

在执行存储过程时,我们常遇到执行超时的情况。如果是因为要处理的数据过多,修改流程复杂等原因的话,如以用以下方法解决:在存储过程的处理工作中加上事务管理:SET TRANSACTION ISOLATION LEVEL REPEATABLE READ --->要这行
BEGIN TRAN /* 这里是程序处理代码段*/commit transaction
QuitWithRollback:
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRANSACTION
END 以下是事务相关的知识:BEGIN TRANSACTION--开始事务DECLARE @errorSun INT --定义错误计数器SET @errorSun=0 --没错为0UPDATE a SET id=232 WHERE a=1 --事务操作SQL语句SET @errorSun=@errorSun+@@ERROR --累计是否有错UPDATE aa SET id=2 WHERE a=1 --事务操作SQL语句SET @errorSun=@errorSun+@@ERROR --累计是否有错IF @errorSun<>0 BEGIN PRINT '有错误,回滚'ROLLBACK TRANSACTION--事务回滚语句END ELSE BEGIN PRINT '成功,提交'COMMIT TRANSACTION--事务提交语句END1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。他包含的所有数据库操作命令作为一个整体一起向系提交或撤消,这一组数据库操作命令要么都执行,要么都不执行。2.事务的语句 开始事物:BEGIN TRANSACTION  提交事物:COMMIT TRANSACTION  回滚事务:ROLLBACK TRANSACTION3.事务的4个属性①原子性(Atomicity):事务中的所有元素作为一个整体提交或回滚,事务的个元素是不可分的,事务是一个完整操作。②一致性(Consistemcy):事物完成时,数据必须是一致的,也就是说,和事物开始之前,数据存储中的数据处于一致状态。保证数据的无损。③隔离性(Isolation):对数据进行修改的多个事务是彼此隔离的。这表明事务必须是独立的,不应该以任何方式以来于或影响其他事务。④持久性(Durability):事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库4.事务的保存点 SAVE TRANSACTION 保存点名称 --自定义保存点的名称和位置 ROLLBACK TRANSACTION 保存点名称 --回滚到自定义的保存点 二事例 所谓事务是指一组逻辑操作单元,它使数据从一种状态变换到另一种状态。包括四个特性:1、原子性 就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全回滚,全部不保留2、一致性 事务完成或者撤销后,都应该处于一致的状态3、隔离性 多个事务同时进行,它们之间应该互不干扰.应该防止一个事务处理其他事务也要修改的数据时, 不合理的存取和不完整的读取数据4、持久性 事务提交以后,所做的工作就被永久的保存下来 示例:创建一个存储过程,向两个表中同时插入数据Create proc RegisterUser(@usrName varchar(30),@usrPasswd varchar(30),@age int,@sex varchar(10),@PhoneNum varchar(20),@Address varchar(50) )as beginbegin traninsert into userinfo(userName,userPasswd)values(@usrName,@usrPasswd)if @@error<>0begin rollback tranreturn -1endinsert into userdoc(userName,age,sex,PhoneNumber,Address)values(@Usrname,@age,@sex,@PhoneNum,@Address)if @@error<>0begin rollback tranreturn -1endcommit tranreturn 0end事务的分类按事务的启动与执行方式,可以将事务分为3类:显示事务 也称之为用户定义或用户指定的事务,即可以显式地定义启动和结束的事务。分布式事务属于显示事务自动提交事务默认事务管理模式。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。隐性事务当连接以此模式进行操作时,sql将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只需提交或回滚每个事务。它生成连续的事务链。一、显示事务通过begin transacton、commit transaction、commit work、rollback transaction或rollback work等语句完成。1、启动事务格式:begin tran 事务名或变量 with mark 描述2、结束事务格式:commit tran 事务名或变量 (事务名与begin tran中的事务名一致或commit work 但此没有参数3、回滚事务 rollback tran 事务名或变量 | savepoint_name | savepoint_variable 或rollback work 说明:清除自事务的起点或到某个保存点所做的所有数据修改4、在事务内设置保存点格式:save tran savepoint_name | savepoint_variable 示例:use bookdbgobegin tran mytraninsert into book values(9,"windows2000',1,22,'出版社')save tran mysavedelete book where book_id=9rollback tran mysavecommit trangoselect * from bookgo可以知道,上面的语句执行后,在book中插入了一笔记录,而并没有删除。因为使用rollback tran mysave 语句将操作回滚到了删除前的保存点处。5、标记事务格式:with mark 例:使用数据库标记将日志恢复到预定义时间点的语句 在事务日志中置入一个标记。请注意,被标记的事务至少须提交一个更新,以标记该日志。BEGIN TRAN MyMark WITH MARK UPDATE pubs.dbo.LastLogMark SET MarkTime = GETDATE() COMMIT TRAN MyMark 按照您常用的方法备份事务日志。BACKUP LOG pubs TO DISK='C:/Backups/Fullbackup.bak' WITH INIT 现在您可以将数据库恢复至日志标记点。首先恢复数据库,并使其为接受日志恢复做好准备。 RESTORE DATABASE pubs FROM DISK=N'C:/Backups/Fullbackup.bak' WITH NORECOVERY 现在将日志恢复至包含该标记的时间点,并使其可供使用。请注意,STOPAT在数据库正在执行大容量日志时禁止执行。 RESTORE LOG pubs FROM DISK=N'C:/Backups/Logbackup.bak' WITH RECOVERY, STOPAT='02/11/2002 17:35:00'5、不能用于事务的操作创建数据库 create database 修改数据库 alter database 删除数据库 drop database 恢复数据库 restore database 加载数据库 load database 备份日志文件 backup log 恢复日志文件 restore log 更新统计数据 update statitics 授权操作 grant 复制事务日志 mp tran 磁盘初始化 disk init 更新使用sp_configure后的系统配置 reconfigure二、自动提交事务 sql连接在begin tran 语句启动显式事务,或隐性事务模式设置为打开之前,将以自动提交模式进行操作。当提交或回滚显式事务,或者关闭隐性事务模式时,将返回到自动提交模式。示例: 由于编译错误,使得三个insert都没执行use testgocreate table testback(cola int primary key ,colb char(3))goinsert into testback values(1,'aaa')insert into testback values(2,'bbb')insert into testback value(3,'ccc')goselect * from testbackgo 没有任何结果返回三、隐式事务通过 API 函数或 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开。下一个语句自动启动一个新事务。当该事务完成时,再下一个 Transact-SQL 语句又将启动一个新事务。当有大量的DDL 和DML命令执行时会自动开始,并一直保持到用户明确提交为止,切换隐式事务可以用SET IMPLICIT_TRANSACTIONS 为连接设置隐性事务模式.当设置为 ON 时,SET IMPLICIT_TRANSACTIONS 将连接设置为隐性事务模式。当设置为 OFF 时,则使连接返回到自动提交事务模式 语句包括: alter table insert open create delete revoke drop select fetch truncate table grant update 示例: 下面使用显式与隐式事务。它使用@@tracount函数演示打开的事务与关闭的事务:use testgoset nocount oncreate table t1(a int)goinsert into t1 values(1)goprint '使用显式事务'begin traninsert into t1 values(2)print '事务外的事务数目:'+cast(@@trancount as char(5))commint tranprint '事务外的事务数目:'+cast(@@trancount as char(5))goprintgoset implicit_transactions on go print '使用隐式事务'goinsert into t1 values*4)print'事务内的事务数目:'+cast(@@trancount as char(5))commint tran print'事务外的事务数目:'+cast(@@trancount as char(5))go执行结果: 使用显示事务事务内的事务数目:2 事务外的事务数目:1 使用隐式事务事务内的事务数目:1 事务外的事务数目:0四、分布式事务跨越两个或多个数据库的单个sql server中的事务就是分布式事务。与本地事务区别:必须由事务管理器管理,以尽量避免出现因网络故障而导致一个事务由某些资源管理器成功提交,但由另一些资源管理器回滚的情况。 sql server 可以由DTc microsoft distributed transaction coordinator 来支持处理分布式事务,可以使用 BEgin distributed transaction 命令启动一个分布式事务处理 分二阶段:A 准备阶段 B 提交阶段执行教程:1、sql 脚本或应用程序连接执行启动分布式事务的sql语句2、执行该语句的sql在为事务中的主控服务器3、脚本或应用程序对链接的服务器执行分布式查询,或对远程服务器执行远程存储过程。4、当执行了分布式查询或远程过程调用后,主控服务器将自动调用msdtc以便登记分布式事务中链接的服务器和远程服务器5、当脚本或应用程序发出commit或rollback语句时,主控sql将调用msdtc管理两阶段提交过程,或者通知链接的服务器和远程服务器回滚其事务。

热心网友 时间:2022-04-10 22:08

我也遇到过类似的问题,就是执行存储过程第一次不报错、但是很慢、第二次打开这个存储过程执行的时候就会报错,那是换行引起的,一般在sqlserver2000里面发现!
关于sql sever 的系统存储过程

系统存储过程:(System stored Procedure)sp_开头,为SQLSERVER内置存储过程。扩展存储过程:(Extended stored Procedure),也就是外挂程序,用于扩展SQLSERVER的功能,以sp_或者xp_开头,以DLL的形式单独存在。(系统存储过程和扩展存储过程都是在master数据库中。sp_开头的可是全局的,任何一个数据库都可...

sqlserver如何保存存储过程

1、点击数据库表右键的【设计】;2、把影响到的列改成允许为空;3、点击【保存】。原因:SQL存储过程语法可能是正确的,因为语法并没有对表结构内部字段是否非空进行验证,只有执行了才知道。可以选择编辑前200行,看一下是不是新增了列,但是列里面的值是null,然后又在设置的列里面不允许有null,...

sqlserver存储过程防止字段插入重复

create procedure insert_pig str varchar(6), --定义一个输入参数,就是那个是不是重复的值 str1 char(2)--把每一列弄成变量存入,不知你的表有几字段,这里我就以两个字段为例 as declare @sum int begin tran insert into admin (列1,列2) values (@str,@str1)select @sum=count(*) ...

sqlserver

存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,类似一门程序设计语言,也包括了数据类型、流程控制、输入和输出和它自己的函数库。存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给...

sqlserver怎么创建存储过程

打开SQL Server 2005的管理工具,选中需要创建存储过程的数据库,找到“可编程性”,展开后可以看到“存储过程”。右键点击它,选择“新建存储过程”,右侧的编辑窗口打开后,里面装着微软自动生成的SQL Server创建存储过程的语句。将存储过程的名字、参数、操作语句写好后-&gt;点击语法分析,没有错误就直接按...

sqlserver里存储过程怎么调用存储过程

sqlserver里调用存储过程的具体操作步骤如下:1、打开SQL Server Managment管理工具,新建一个表。2、然后在表中插入一些样例数据。3、接下来在SQL Server Managment中右键单击可编程性,选择新建存储过程。4、然后在SQL编写界面中编写SQL语句,注意这里的@name就是接收的输入参数。5、编写好存储过程,执行一...

sqlserver怎么创建存储过程

SQL 创建存储过程:一、基础语法:create proc | procedure pro_name [{@参数数据类型} [=默认值] [output], {@参数数据类型} [=默认值] [output], ... ]as SQL_statements 二、常见创建存储过程实例 1、创建不带参数存储过程 create proc proc_get_studentasselect * from st...

sqlserver怎么创建存储过程?

1、打开SQLservermanagementstudio,连接到数据库,展开想要创建的数据库,找到【可编程性】-&gt;【存储过程】的菜单。2、在第一步找到的【存储过程】菜单项上面,点击鼠标右键,依次选择【新建】-&gt;【存储过程】,就可以开始创建存储过程了。3、当点击了第二步的【存储过程】之后,在右侧就会出现一个新的...

在SQL Server数据库中 存储过程是什么,希望给点例题

存储过程不仅sqlserver里有、其他dbms也有、只是语法有小出入。存储过程是一段存储在系统中可随时使用的可带参数的SQL执行语句或程序段。使用存储过程可以避免重复的填写SQL语句、可以快速的得到符合条件的某段SQL语句的执行结果。例子(MSSQL):比如想实现一个表a(aid int,atime datetime)输入aid的值得到...

为什么数据库sqlserver中有存储过程这个

分为两种存储过程:一是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它;二是全局临时存储过程,以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局...

SQLserver创建存储过程 sqlserver存储过程怎么写 sqlserver存储过程的优缺点 sqlserver存储过程语法 sql怎么执行存储过程 sqlserver视图和存储过程 sqlserver索引数据结构 sqlsever存储过程写法和调用 SQL执行存储过程语句
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
上海2013中考二模浦东新区和静安区市重点参考录取分数线 2012上海中考自荐 腾讯服务器崩溃了吗 淘宝店铺名怎么工商注册 开淘宝店需要办理工商营业登记册吗?怎么办理? 淘宝开店需要个体户工商证吗?怎么开店? 腾讯垃圾服务器 西安水岸龙庭怎么样?好不好?值不值得买? 任何人都可以发腾讯黄金红包吗? 夫妻是否可以单方面强制离婚 呛芥菜丝的腌制方法有哪些 广联达软件学习版如何下载 新东方网校学习与破解版的区别 合适学英语听力的电影或视频 广联达学习版有没有? 我想自学建筑工程预算,从零基础学起,该看什么书,那里有比较好的视频教程。 广联达钢筋抽样2009学习版软件下载和视频教程 急求广联达算量软件学习版,和教学视频,主要的是钢筋算量,和视频,最好教学视频能全一点 哪里能下载到鲁班算量学习视频? 「将进酒」李白诗集全文超高清视频朗诵学习版 梦到自己跳楼但是看到一个人然后还是不想死,这是为什么? 12v的led灯60v的电动车能用吗? 晚上做梦梦见三个人跳楼自杀,但是都没死,这预示着什么? 请问16V的电瓶可以带动12V的LED灯吗,会烧掉吗? 梦见自己被*跳楼 但是还没有死掉 还有一口气 可是没有人救我 我就这样死了 直到尸体腐烂 然后出 有时梦到自己跳楼自杀被人拉住,没死成。 梦见自己跳楼,什么意思 12VLED灯低于多少V不会亮 12V电池可以接多少个LED灯? 梦到自己自杀没死却流很多血流不止 我的微博账号登录时,显示你的账号长时间没有使用,已被收回,客服联系不上,该怎么处理。 该帐号长期未使用已被回收,建议注册一个新帐号使用? 我之前有个微博账号,昨天登陆时就提示该账号未注册,账号和密码都是对的,该怎么解 新浪微博帐号长时间没登陆会被收回吗? 新浪微博帐号如果注册了从不登陆多久会被收回呢? 把生鸡蛋浸在醋里,要过几天才能吃。 大学选专业JAVA和软件测试哪个好点? 到中公优就业学Java好,还是软件测试好啊? java与软件测试哪个好? 分期卖手机怎么付钱 如何查看xcode的版本 如何进行微店首页的优化设计? 怎样查看xcode版本 已有一个ios小应用 想要知道该应用是用Xcode哪个版本编的,应该看哪里,在线等,急急急 如何找出Xcode中不同版本Swift的路径 如何查看自己苹果电脑下的swift版本 ios开发 怎么查看app每个版本的版本信息 微店还要设计网页吗 如何查看mac xocde自带的svn的版本 如何查看Xcode插件安装的位置