在一个SQL Server存储过程中执行两个插入语句?

时间:2014-07-23 16:44:26

标签: asp.net sql sql-server

我试图在一个SQL Server存储过程中实现两个插入语句。我做了类似的事情,但第二个插入语句不起作用。有任何想法吗?感谢。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[InsertWrite]
   @Die nvarchar(8),
   @TSO int,
   @TSOStatus nvarchar(50);
as 
BEGIN
    SET NOCOUNT OFF;

    INSERT INTO Table1 (TSO, TSOStatus) 
    VALUES (@TSO, @TSOStatus)

    if @@rowcount > 0
    BEGIN
        INSERT INTO Table2 (TSO, Die) 
        VALUES (@TSO, @Die);      

        COMMIT
    END 
    ELSE 
        ROLLBACK
END

2 个答案:

答案 0 :(得分:1)

您不需要额外的commitrollback,因为我没有看到您开始交易的任何地方。不确定你正在尝试什么,但下面的代码工作得很好

CREATE PROCEDURE [dbo].[InsertWrite]
@Die varchar(8),
@TSO varchar(10),
@TSOStatus varchar(50)

as 

BEGIN
SET NOCOUNT OFF;
    INSERT INTO Tab1 (TSO, TSOStatus) Values (@TSO,@TSOStatus);
 if @@rowcount > 0
    INSERT INTO Tab2 (TSO,Die) Values (@TSO, @Die);         
 END

答案 1 :(得分:0)

你可以大大简化这个:

create procedure dbo.InsertWrite

  @Die       nvarchar(8)  ,
  @TSO       int          ,
  @TSOStatus nvarchar(50)

as 
  set nocount    on

  begin transaction

  begin try

    insert Table1 ( TSO , TSOStatus ) values ( @TSO , @TSOStatus )
    insert Table2 ( TSO , Die       ) values ( @TSO , @Die       )
    commit transaction

  end try
  begin catch

    rollback transaction
    throw

  end catch

  return 0
go