[笔记][MSSQL]关于SQL的交易概念

在T-SQL语法中我们可以用到「新增(INSERT)」、「更新(UPDATE)」、「删除(DELETE)」来做到处理资料的作业和功能,但是在实务上常常会有许多事情是无法由一段T-SQL处理完成的,例如在进销存系统中的进货作业,一项作业就必须更新「进货单主档」、「进货单明细」、「产品库存」三个资料表。

面对上述状况有一部分人会用「触发程序(Trigger)」,但是在无法使用「触发程序(Trigger)」的状态下,就必须执行三段T-SQL才能完成一项进货作业,但每一段T-SQL都是独立执行的,执行完第一段就会接着执行第二段、第三段,也就是说就算其中第一段或第二段的T-SQL错误,第三段SQL一样会执行,这种状况会直接造成库存数量错误,引起资料错乱,当然也可以靠程式去处理这些问题,但这些事其实可以直接在SQL中用「交易(Transaction)」做判断处理。

交易管理的语法:
1.BEGIN TRANSACTION:开启交易,打开交易功能。
2.COMMIT TRANSACTION:确认交易,在交易结束时确认交易,在确认时资料才会真的写入资料表。
3.ROLLBACK TRANSACTION:回复交易,执行这行时,会回复在交易内所有T-SQL所更动的内容。

以下使用交易:

--先开启交易BEGIN TRANSACTION--定义变数,这边用来放值型的T-SQL是否有错误DECLARE @M int,@D int ,@S int ,@R int --新增进货单INSERT INTO purchase_m(purchase_id)VALUES('PUR1')--撷取上一次(进货单)执行T-SQL的错误错误代码SELECT @M = @@ERROR--新增进货明细INSERT INTO purchase_d(purchase_id,seq,prod_id,QTY)VALUES('PUR1','1','PROD1',100)--撷取上一次(进货明细)执行T-SQL的错误错误代码SELECT @D = @@ERROR--异动库存UPDATE stockSET QTY = QTY + 100WHERE prod_id = 'PROD1'--撷取上一次(产品库存)执行T-SQL的错误错误代码SELECT @S = @@ERROR--撷取上一次(产品库存)执行T-SQL的异动笔数SELECT @R = @@ROWCOUNT--之后来做判断,看是否三次执行T-SQL的错误都为0--最后一个@R是判断产品的库存量是否有被异动成功IF @M = 0 AND @D = 0 AND @S = 0 AND @R = 1--没问题就确认交易完成,资料也会在这时候确认新增和修改COMMIT TRANSACTIONELSE--若是有问题就取消交易,让资料不被这三段T-SQL所影响ROLLBACK TRANSACTION

Function:
1.@@ERROR
撷取最后一次执行T-SQL的错误代码,成功执行会回传0。

2.@@ROWCOUNT
撷取最后一次执行T-SQL的异动笔数。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章