sqlserver中创建包含事务的存储过程
1 ALTER proc [dbo].[Proc_InsertStudent]
2 @stuName nvarchar(50),@stuClassId int,@stuAge int
3 as
4 begin
5 set nocount on --on表示不返回计数
6 set xact_abort on --当执行事务时,如果出错,会将transcation设置为uncommittable状态
7
8 begin try
9 declare @stuCountByName int;
10 select @stuCountByName=count(*) from Students where Name=@stuName;
11
12 if(isnull(@stuName,'')='')
13 begin
14 print('名字不能为空');
15 return;
16 end
17
18 if(@stuCountByName>0)
19 begin
20 print('名字重复');
21 return
22 end
23
24 begin tran --开启事务
25 insert into Students(Name,ClassId,Age) values(@stuName,@stuClassId,@stuAge)
26 commit tran --提交事务
27
28 end try
29
30 begin catch
31 if xact_state()=-1
32 rollback tran; --回滚事务
33 select ERROR_NUMBER() as ErrorNumber;
34 select ERROR_MESSAGE() as ErrorMsg;
35 end catch
36 set xact_abort off;
37 end 其中Students表:
1 CREATE TABLE [dbo].[Students](
2 [ID] [int] IDENTITY(1,1) NOT NULL primary key,
3 [Name] [nvarchar](50) NOT NULL,
4 [ClassId] [int] NOT NULL,
5 [Age] [int] NOT NULL,
6 [CreateTime] [datetime] NOT NULL
7 );


1 ALTER proc [dbo].[Proc_InsertStudent]
2 @stuName nvarchar(50),@stuClassId int,@stuAge int
3 as
4 begin
5 set nocount on --on表示不返回计数
6 set xact_abort on --当执行事务时,如果出错,会将transcation设置为uncommittable状态
7
8 begin try
9 declare @stuCountByName int;
10 select @stuCountByName=count(*) from Students where Name=@stuName;
11
12 if(isnull(@stuName,'')='')
13 begin
14 print('名字不能为空');
15 return;
16 end
17
18 if(@stuCountByName>0)
19 begin
20 print('名字重复');
21 return
22 end
23
24 begin tran --开启事务
25 insert into Students(Name,ClassId,Age) values(@stuName,@stuClassId,@stuAge)
26 commit tran --提交事务
27
28 end try
29
30 begin catch
31 if xact_state()=-1
32 rollback tran; --回滚事务
33 select ERROR_NUMBER() as ErrorNumber;
34 select ERROR_MESSAGE() as ErrorMsg;
35 end catch
36 set xact_abort off;
37 end
sqlserver中创建包含事务的存储过程的更多相关文章
- SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题
转自 :SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题 问题: 1. System.Data.SqlClient.SqlExcepti ...
- 用字符流实现每个文件夹中创建包含所有文件信息的readme.txt
package com.readme; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; i ...
- SqlServer中创建Oracle连接服务器
转自太祖元年的:http://www.cnblogs.com/jirglt/archive/2012/06/10/2544025.html参考:http://down.51cto.com/data/9 ...
- mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?
需求描述: 在mysql数据库中,创建包含json数据类型的表.记录下,在创建的过程中,需要注意的问题. 操作过程: 1.通过以下的语句,创建包含json数据类型的表 mysql> create ...
- SqlServer中创建Oracle链接服务器
SqlServer中创建Oracle链接服务器 第一种:界面操作 (1)展开服务器对象-->链接服务器-->右击“新建链接服务器” (2)输入链接服务器的IP (3)链接成功后 第二种:语 ...
- SQLServer之创建分布式事务
分布式事务创建注意事项 指定一个由 Transact-SQL 分布式事务处理协调器 (MS DTC) 管理的 Microsoft 分布式事务的起点. 执行 BEGIN DISTRIBUTED TRAN ...
- Sql语句在SqlServer中创建数据库、表格并添加约束
通过Sql语句来创建数据库与架构 创建数据库 数据库的创建首先是要引用主数据库的,需要在master数据库的环境下进行创建.大致的语法如下: -- 使用master数据库 use master -- ...
- Sqlserver中查找包含某一列的所有的表
select cols.name,cols.id,objs.name,objs.id from syscolumns cols INNER JOIN sysobjects objs on cols.i ...
- sqlserver中创建链接服务器
链接服务器在跨数据库/跨服务器查询时非常有用(比如分布式数据库系统中),本文将以图文方式详细说明如何利用SQL Server Management Studio在图形界面下创建链接服务器. 1 ...
随机推荐
- oauth协议
微博 : 新浪 腾讯 OAuth 新浪微博 APP开发 步骤:1.注册新浪开发者账号 获取以下信息 client_id 123456 标示应用身份的 唯一的 有的也叫App Key sec ...
- 夺命雷公狗-----React---7--组建的状态props和state
props:组建初始要渲染的数据,他是不可以改变的 state:组建状态发生改变,调用render重新渲染数据 我们来写一个例子: <!DOCTYPE html> <html lan ...
- 文件上传插件uploadify详解
官网:http://www.uploadify.com/ 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. 要求使用jquery1.4或以上 ...
- iOS中UIWebView与其中网页的javascript的交互
首发:个人博客,更新&纠错&回复 1.本地语言调js的方式与android中的方式类似,也是向WebView控件发送要调用的js语句 2. 但js调本地语言,则不是像android那样 ...
- mysql常用命令(3)
一.启动与关闭 1.1 Linux下启动mysql 的命令: a. rpm包安装:service mysqld start b. 源码包安装:/usr/local/mysql/bin/mysqld_s ...
- asp.net 分页-自己写分页控件
去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认 ...
- 20160622001 GridView 删除列 用模板实现删除时提示确认框
GridView在使用CommandField删除时弹出提示框,在.net2005提供的GridView中我们可以直接添加一个 CommandField删除列:<asp:CommandField ...
- 网页设计中常用的19个Web安全字体
来自http://www.jb51.net 在Web编码中,CSS默认应用的Web字体是有限的,虽然在新版本的CSS3,我们可以通过新增的@font-face属性来引入特殊的浏览器加载字体.但多数情况 ...
- shell & dialog
最近使用dialog写图形自动化shell脚本, 功能很强大,功能不是非常多但是足够用.想写一篇linux下dialog的使用方法,虽然命令不多,但是写起来也需要下很大功夫,而且不一定写得更好,在网 ...
- 。【自学总结 1】------3ds Max 界面
3ds Max 界面包含4部分(7区域) 4部分:菜单.控制工具.命令面板.窗口区 7区域: 1.标题栏:主要用于显示当前工作文件的名称,可以看到文件存储路径. 2.菜单栏:菜单中的命令如果带有省略号 ...