小编Dan*_*l F的帖子

当另一半失败时,交易的一半完成?

我在 SO、MSDN 和其他各种来源上进行了一些搜索,发现了很多关于事务的问题,但似乎没有一个正是我正在处理的问题。

诚然,尽管我确实了解 ACID 和事务的概念,但我仍然是初级 DBA。我正在处理一个 SQL 脚本:

  1. 向 2 个不同的表添加一行,前提是这些值尚不存在
  2. 如果存在,则删除列
  3. 如果不存在则添加一列
  4. 更改 2 个生成动态 SQL 以构建报表查询的存储过程

上述所有操作都是独立工作的,并且在(我认为是)单个事务中包含时,它们也会协同工作。我试图理解的是,当事务的另一部分失败时,事务的“部分”如何完成(并可能提交)。

为简洁起见,假设我有名为“ProcessReport”和“RetrieveReport”的工作程序。这两个过程中的动态 SQL 都以“SELECT”开头,然后从那里开始构建。测试用例:

CREATE TABLE ReportTable (FirstName VARCHAR(100), LastName VARCHAR(100), OrderId INT);
GO
CREATE PROCEDURE ProcessReport
AS
BEGIN
  DECLARE @SQL VARCHAR(4000)

  -- start creating dynamic sql   
  SET @SQL = 'SELECT FirstName, LastName, '
  --create rest of dynamic SQL here...

  INSERT INTO ReportTable (FirstName, LastName) EXEC(@SQL)
END
GO 

CREATE PROCEDURE RetrieveReport
AS
BEGIN
  DECLARE @SQL VARCHAR(4000)

  -- start creating dynamic sql …
Run Code Online (Sandbox Code Playgroud)

t-sql transaction sql-server-2012 acid

4
推荐指数
1
解决办法
1486
查看次数

标签 统计

acid ×1

sql-server-2012 ×1

t-sql ×1

transaction ×1