本题试图探索 SQL Server 2000 中 TransactionScope 和 xact_abort 之间交互所涉及的语义。
如果在 TransactionScope 中执行以下 sql,并且第一个删除命令出错,是否会运行第二个删除命令?(假设从父母到孩子的外键以确保失败。)
create procedure test
@id int
as
set xact_abort on
-- no explicit transaction is created
-- if this fails
delete from dbo.[parentTable]
where id = @id
-- will this run?
delete from dbo.[childTable]
where id = @id
假设简单的应用程序代码如下:
public bool TryTestStoredProcedure()
{
try
{
using (TransactionScope t = new TransactionScope())
{
MethodThatRunsTestStoredProcedure();
t.Complete();
return true;
}
}
catch
{
return false;
}
}
如果存储过程中的第一个删除语句失败,此方法的返回值是多少?如果第二个删除语句失败怎么办?