如何使用存储过程检查删除/更新操作是否成功完成?

时间:2010-01-19 12:05:09

标签: c# sql-server stored-procedures tableadapter

假设我们有执行简单操作的存储过程

CREATE PROCEDURE [dbo].[AddNewAuthorReturnID]
(   
    @Author_Name VARCHAR(MAX),
    @Author_ID int OUTPUT
)
AS
    SET NOCOUNT OFF;
BEGIN
 INSERT INTO AUTHORS (@Author_Name)
 VALUES (@Author_Name)
 SET @Author_ID = SCOPE_IDENTITY()
 SELECT @Author_ID
END

在上述过程中,重新调整的id表示操作成功。

考虑一下

CREATE PROCEDURE [dbo].[DeleteAuthor]
(       
    @Author_ID int 
)
AS
    SET NOCOUNT OFF;
BEGIN
 DELETE FROM AUTHORS 
 WHERE
 (Author_ID = @Author_ID)
END
  • 我们怎么知道这个操作 成功和记录(作者)是 如果我们在上面使用,成功删除 程序?

  • 与更新操作相同吗?

感谢

3 个答案:

答案 0 :(得分:3)

您可以返回@@ROWCOUNT以确定您的上一个语句是否影响了任何记录。

答案 1 :(得分:2)

您可以选择@@ rowcount

它会显示受影响的行。

e.g

CREATE PROCEDURE [dbo].[DeleteAuthor]
(       
    @Author_ID int 
)
AS
    SET NOCOUNT OFF;
BEGIN
 DELETE FROM AUTHORS 
 WHERE
 (Author_ID = @Author_ID)
 SELECT @@ROWCOUNT 
END

这也适用于更新。

CREATE PROCEDURE [dbo].[UpdateAuthor]
(       
    @Author_ID int 
)
AS
    SET NOCOUNT OFF;
BEGIN
 UPDATE AUTHORS 
    SET AuthorName = 'John'
 WHERE
 (Author_ID = @Author_ID)
 SELECT @@ROWCOUNT 
END

或者您可以使用@@ Error并引发错误ID @@ rowcount> 1(如果你只想更新一行)。

e.g

CREATE PROCEDURE [dbo].[DeleteAuthor]
(       
    @Author_ID int 
)
AS
    SET NOCOUNT OFF;
BEGIN
 DELETE FROM AUTHORS 
 WHERE
 (Author_ID = @Author_ID)

 IF @@ROWCOUNT <>1
 BEGIN
  RAISERROR ('An error occured',10,1)
  RETURN -1
 END
END

正如Giorgi所说,这将作为返回码返回。

答案 2 :(得分:2)

您可以使用return语句从存储过程返回值。如果没有错误,@@ERROR变量等于零。

@@ERROR

CREATE PROCEDURE [dbo].[DeleteAuthor]
(       
    @Author_ID int 
)
AS
    SET NOCOUNT OFF;
BEGIN
 DELETE FROM AUTHORS 
 WHERE
 (Author_ID = @Author_ID)

 Return @@ERROR

END