2010-01-19 3 views
1

말 우리는 저장된 절차 (들)을 수행 간단한 조작저장 프로 시저를 사용하여 성공적으로 삭제/upadate 작업을 완료했는지 확인하는 방법은 무엇입니까?

상기 절차
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 

는 재선 이드 성공적인 동작의 표시이다. 우리가 위의 절차를 사용하는 경우

이이

CREATE PROCEDURE [dbo].[DeleteAuthor] 
(  
    @Author_ID int 
) 
AS 
    SET NOCOUNT OFF; 
BEGIN 
DELETE FROM AUTHORS 
WHERE 
(Author_ID = @Author_ID) 
END 
  • 우리가 어떻게 작동했다 알 수 고려

    성공 기록 (저자) 은 성공적으로 제거되었다?

  • 업데이트 작업과 동일합니까?

감사

답변

1

당신은 선택할 수 있습니다 @@ 행 개수

그것은 당신에게 영향을받는 행을 표시합니다.

이 너무 업데이트에 적용 할 수

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 

은 또는 당신 @@ 오류를 사용하고 (당신이 하나 개의 행을 갱신하기를 원한다면) 오류 ID @@ ROWCOUNT> 1을 올릴 수 있습니다.

예컨대

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 

오르기이는 반환 코드로 반환 될 것이라고한다.

+0

@ 존, 오류가 어떻게 발생하지? – Giorgi

+0

업데이트 작업은 어떻게됩니까? –

+0

@asdi 업데이트 작업과 동일한 방식으로 @@ ROWCOUNT를 사용할 수 있지만 저장 프로 시저가 오류없이 실행되지만 영향을받는 행이없는 경우 0을 반환하기 때문에 사용하지 않는 것이 좋습니다 – Giorgi

3

@@ROWCOUNT을 반환하여 마지막 기록이 어떤 기록에 영향을 주는지 확인할 수 있습니다.

+0

@Rubens, 명령문이 어떤 행에도 영향을 미치지 만 오류가 발생하지 않으면 어떻게 될까요? – Giorgi

+0

맞습니다. @Giorgi하지만 온라인 응용 프로그램의 레코드에 영향을주는 업데이트/삭제 문이 필요할 것입니다. 결론은 무엇입니까? OP가 수행 할 작업에 따라 달라집니다. –

2

return 문을 사용하여 저장 프로 시저에서 값을 반환 할 수 있습니다. 오류가없는 경우 @@ERROR 변수는 0입니다.

@@ERROR

문이 어떤 행에 영향을하지만하지 않은 경우
CREATE PROCEDURE [dbo].[DeleteAuthor] 
(  
    @Author_ID int 
) 
AS 
    SET NOCOUNT OFF; 
BEGIN 
DELETE FROM AUTHORS 
WHERE 
(Author_ID = @Author_ID) 

Return @@ERROR 

END 
+0

오류가 없지만 사용자가 레코드를 삭제하려고하고 있는데 거기에 없었 으면 어떻게됩니까? –