相关疑难解决方法(0)

从一个存储过程启动3个存储过程时如何回滚

我有一个存储过程,它只在其中执行 3 个存储过程。如果主 SP 成功,我只使用 1 个参数来存储。

如果第一个存储过程在主存储过程中工作正常,但第二个存储过程失败,那么它会自动回滚主 SP 中的所有 SP 还是我必须发出一些命令?

这是我的程序:

CREATE PROCEDURE [dbo].[spSavesomename] 
    -- Add the parameters for the stored procedure here

    @successful bit = null output
AS
BEGIN
begin transaction createSavebillinginvoice
    begin Try
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

   BEGIN 

   EXEC [dbo].[spNewBilling1]

   END

   BEGIN 

   EXEC [dbo].[spNewBilling2]

   END

   BEGIN 

   EXEC [dbo].[spNewBilling3]

   END 

   set @successful  = 1

   end Try

    begin Catch
        rollback transaction createSavesomename
        insert …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures transaction

27
推荐指数
2
解决办法
5万
查看次数

我们是否需要在 C# 代码和存储过程中处理事务

我们真的需要 C# 中的事务处理以及双方的数据库存储过程吗?

C#:

Using(transaction with transaction scope)
{
     Execute stored proc;
     Transaction. Complete;
}
Run Code Online (Sandbox Code Playgroud)

SQL存储过程:

Create process
As
Begin try
    Begin transaction
    Commit
End try
Begin catch
    Rollback
End catch
Run Code Online (Sandbox Code Playgroud)

sql-server ado.net t-sql transaction c#

17
推荐指数
1
解决办法
9994
查看次数

具有“预览模式”的数据库存储过程

我使用的数据库应用程序中一个相当常见的模式是需要为具有“预览模式”的报表或实用程序创建存储过程。当这样的过程进行更新时,此参数指示应返回操作的结果,但该过程不应实际执行对数据库的更新。

实现这一点的一种方法是简单地if为参数编写一个语句,并有两个完整的代码块;其中一个更新并返回数据,另一个只返回数据。但这是不可取的,因为代码重复和相对较低的置信度,即预览数据实际上是更新后会发生的情况的准确反映。

以下示例尝试利用事务保存点和变量(不受事务影响,与临时表相反)将预览模式的单个代码块用作实时更新模式。

注意:事务回滚不是一个选项,因为此过程调用本身可能嵌套在事务中。这是在 SQL Server 2012 上测试的。

CREATE TABLE dbo.user_table (a int);
GO

CREATE PROCEDURE [dbo].[PREVIEW_EXAMPLE] (
  @preview char(1) = 'Y'
) AS

CREATE TABLE #dataset_to_return (a int);

BEGIN TRANSACTION; -- preview mode required infrastructure
  DECLARE @output_to_return TABLE (a int);
  SAVE TRANSACTION savepoint;

  -- do stuff here
  INSERT INTO dbo.user_table (a)
    OUTPUT inserted.a INTO @output_to_return (a)
    VALUES (42);

  -- catch preview mode
  IF @preview = 'Y'
    ROLLBACK TRANSACTION savepoint;

  -- save output to temp table …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

15
推荐指数
2
解决办法
867
查看次数

标签 统计

sql-server ×3

t-sql ×2

transaction ×2

ado.net ×1

c# ×1

stored-procedures ×1