SQL中事务以及全局变量的使用
事务的定义
简单的说,事务处理可以用来维护数据库的完整性,保证一批SQL语句要么全执行,要么全部不执行
事务的特性
原子性 一致性 持久性 隔离性 注:一元九个
事务的使用
select * from MR_Upload_Manual_Excel where Excel_ID='M000181431' begin tran --开始事务 declare @count int --声明变量 set @count=0 --变量初始化 update MR_Upload_Manual_Excel set Courier_Company_Full_Name='Test444' where Excel_ID='M000181431' set @count=@@ROWCOUNT --赋值受影响行数 if(@count=1) --判断受影响行数是否符合预期 begin ----begin... end ... select * from MR_Upload_Manual_Excel where Excel_ID='M000181431' commit tran --提交事务 end else begin select '执行出错,事务回滚' rollback tran ---回滚事务 end
begin tran declare @count int set @count=0 update MR_Upload_Manual_Excel set Courier_Company_Full_Name='Test33' where Excel_ID='M000181431' set @count +=@@ROWCOUNT update MR_Upload_Manual_Excel set Courier_Company_Full_Name='Test44' where Excel_ID='M000181451' set @count +=@@ROWCOUNT if(@count=2) begin select * from MR_Upload_Manual_Excel commit tran end else begin print '出错' rollback tran end
SQL Server中分为局部变量和全局变量
- 全局变量:名称以@@开头(系统事先定义,用户只读)
- 局部变量:名称以@开头(用户自己声明和赋值)
SQL Server中的全局变量: 1、@@CONNECTIONS 返回自上次SQL启动以来连接或试图连接的次数。 2、@@CPU_BUSY 返回自上次SQL启动以来CPU的工作时间,单位为毫秒(基于系统计时器的分辨率)。 3、@@CURSOR_ROWS 返回连接上最后打开的游标中当前存在的合格行的数量。 4、@@DATEFIRST 返回 SET DATEFIRST 参数的当前值,SET DATEFIRST 参数指明所规定的每周第一天:1 对应星期一,2 对应星期二,依次类推,用 7 对应星期日。 5、@@DBTS 返回当前timestamp数据类型的值。这一timestamp值保证在数据库中是唯一的。 6、@@DEFAULT_LANGID 返回默认的本地语言标识符(ID)。 7、@@ERROR 返回最后执行的SQL语句的错误代码 8、@@FETCH_STATUS 返回被fetch语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。 9、@@IDENTITY 返回最后插入的标识值。 10、@@IDLE 返回自上次SQL启动后闲置的时间,单位为毫秒(基于系统计时器的分辨率)。 11、@@IO_BUSY 返回自上次SQL启动后用于执行输入和输出操作的时间,单位为毫秒(基于系统计时器的分辨率)。 12、@@LANGID 返回当前所使用语言的本地语言标识符(ID)。 13、@@LANGUAGE 返回当前使用的语言名。 14、@@LOCK_TIMEOUT 返回当前会话的当前锁超时设置,单位为毫秒。 15、@@MAX_CONNECTIONS 返回SQL上允许的同时用户连接的最大数。返回的数不必为当前配置的数值 16、@@MAX_PRECISION 返回 decimal和numeric数据类型所用的精度级别,即该服务器中当前设置的精度。默认最大精度38。 17、@@MICROSOFTVERSION 返回微软用于数据库引擎的SQLServer版本的内部跟踪号。 18、@@NESTLEVEL 返回当前存储过程执行的嵌套层次(初始值为 0)。 19、@@OPTIONS 返回当前SET选项的信息。 20、@@PACK_RECEIVED 返回自上次SQL启动后从网络上读取的输入数据包数目。 21、@@PACK_SENT 返回自上次SQL启动后写到网络上的输出数据包数目。 22、@@PACKET_ERRORS 返回自上次SQL启动后在SQ连接上发生的网络数据包错误数。 23、@@PROCID 返回当前过程的存储过程标识符 (ID) 。 24、@@REMSERVER 返回远程SQL Server数据库服务器在登录记录中显示的名称。 25、@@ROWCOUNT 返回受上一SQL语句影响的行数。 26、@@SERVERNAME 返回运行SQL Server的本地服务器名称。 27、@@SERVICENAME 返回SQL正在其下运行的注册表键名。若当前实例为默认实例,则 @@SERVICENAME 返回 MSSQLServer;若当前实例是命名实例,则该函数返回实例名。 28、@@SPID 返回当前用户进程的服务器进程标识符 (ID)。 29、@@TEXTSIZE 返回SET语句TEXTSIZE选项的当前值,它指定select语句返回的text或imgae数据的最大长度,以字节为单位。 30、@@TIMETICKS 返回一刻度的微秒数。 31、@@TOTAL_ERRORS 返回自上次SQL启动后所遇到的磁盘读/写错误数。 32、@@TOTAL_READ 返回自上次SQL启动后读取磁盘(不是读取高速缓存)的次数。 33、@@TOTAL_WRITE 返回自上次SQL启动后写入磁盘的次数。 34、@@TRANCOUNT 返回当前连接的活动事务数。 35、@@VERSION 返回当前安装SQL Server的日期、版本和处理器类型。
@@ERROR:当前一个语句遇到错误,则返回错误号,否则返回0。
需要注意的是@ERROR在每一条语句执行后会被立刻重置,因此应该在要验证的语句执行后检查数值或者是将它保存到局部变量中以备将来使用。
@@ROWCOUNT返回受上一语句影响的行数,返回值类型为 int整性。
--@@ROWCOUNT和@@ERROR变量的值,在执行完一条语句后总是会发生变化,所以我们将他们作为判断的依据的时候应该首先保存在局部变量中。他们反映的都是紧接着的上一条语句对他们的影响!