如何使用 Transact-SQL 执行事务处理
2006-12-08 13:54
561 查看
以下存储过程阐明了如何在 Transact-SQL 存储过程内部执行事务性资金转帐操作。
CREATE PROCEDURE MoneyTransfer
@FromAccount char(20),
@ToAccount char(20),
@Amount money
AS
BEGIN TRANSACTION
-- PERFORM DEBIT OPERATION
UPDATE Accounts
SET Balance = Balance - @Amount
WHERE AccountNumber = @FromAccount
IF @@RowCount = 0
BEGIN
RAISERROR('Invalid From Account Number', 11, 1)
GOTO ABORT
END
DECLARE @Balance money
SELECT @Balance = Balance FROM ACCOUNTS
WHERE AccountNumber = @FromAccount
IF @BALANCE < 0
BEGIN
RAISERROR('Insufficient funds', 11, 1)
GOTO ABORT
END
-- PERFORM CREDIT OPERATION
UPDATE Accounts
SET Balance = Balance + @Amount
WHERE AccountNumber = @ToAccount
IF @@RowCount = 0
BEGIN
RAISERROR('Invalid To Account Number', 11, 1)
GOTO ABORT
END
COMMIT TRANSACTION
RETURN 0
ABORT:
ROLLBACK TRANSACTION
GO
该存储过程使用 BEGIN TRANSACTION、COMMIT TRANSACTION 和 ROLLBACK TRANSACTION 语句来手动控制该事务。
CREATE PROCEDURE MoneyTransfer
@FromAccount char(20),
@ToAccount char(20),
@Amount money
AS
BEGIN TRANSACTION
-- PERFORM DEBIT OPERATION
UPDATE Accounts
SET Balance = Balance - @Amount
WHERE AccountNumber = @FromAccount
IF @@RowCount = 0
BEGIN
RAISERROR('Invalid From Account Number', 11, 1)
GOTO ABORT
END
DECLARE @Balance money
SELECT @Balance = Balance FROM ACCOUNTS
WHERE AccountNumber = @FromAccount
IF @BALANCE < 0
BEGIN
RAISERROR('Insufficient funds', 11, 1)
GOTO ABORT
END
-- PERFORM CREDIT OPERATION
UPDATE Accounts
SET Balance = Balance + @Amount
WHERE AccountNumber = @ToAccount
IF @@RowCount = 0
BEGIN
RAISERROR('Invalid To Account Number', 11, 1)
GOTO ABORT
END
COMMIT TRANSACTION
RETURN 0
ABORT:
ROLLBACK TRANSACTION
GO
该存储过程使用 BEGIN TRANSACTION、COMMIT TRANSACTION 和 ROLLBACK TRANSACTION 语句来手动控制该事务。
相关文章推荐
- 如何使用Transact-SQL进行事务处理[示例]
- 如何利用Transact-SQL执行事务
- 使用Oracle SQL Developer连接数据库时,提示“执行请求的操作时遇到错误:IO 错误: The Network Adapter could not establish”,不知如何处理
- 使用Core Data时如何看到所执行的SQL语句?
- VIsual Basic 2005 - 如何使用 SqlBulkCopy 对象来执行大量复制作业
- 如何使用 Transact-SQL 编写作业脚本(企业管理器)
- 使用事务处理多条SQL语句时,@@error在捣鬼
- sqlCmd下的备份还原执行sql脚本和事务等处理
- 使用Core Data时如何看到所执行的SQL语句?
- 如何使用ordered提示改变SQL执行计划
- Linq to sql中如何使用一个统一事务保存级联表格
- 使用Hibernate的session执行任意SQL语句以及整个事务
- 如何遍历一个结果集在 SQL Server 中使用 Transact-SQL
- 如何处理Spring、Ibatis结合MySQL数据库使用时的事务操作
- 【转】如何遍历一个结果集在 SQL Server 中使用 Transact-SQL
- 在EF4.1的DBContext中实现事务处理(BeginTransaction)和直接执行SQL语句的示例
- 使用事务一次处理多条SQL语句
- VIsual Basic 2005 - 如何使用 SqlBulkCopy 对象来执行大量复制作业
- SQL大圣之路笔记——存储过程中含有大量sql时,使用事务处理机制
- 如何通过使用 TRANSACT-SQL SQL Server 中循环访问一结果集