2011-02-02 2 views
2

내 저장 프로 시저입니다 : 내 DBML이 저장 프로 시저를 추가 한LINQ 및 다음 저장 프로 시저의 반환 형식

CREATE PROCEDURE PurgeFoo 
AS 
    DELETE FROM Foo 
    RETURN @@ROWCOUNT 

있지만 반환 형식은 "(자동 생성 형)"하지만 난 'int.

내가 뭘 잘못하고 있니?

편집 : 저장 프로 시저를 삭제하고 다시 만들고 DBML에서 제거했습니다. 이제 반환 유형은 "(없음)"

+0

흠 ... 이상한 .. 내 경우 엔 내 LINQ 데이터 컨텍스트의'.PurgeFoo()'메서드가 참으로 호출에서'INT'를 반환합니다. 제거하고 DBML 모델에서 저장된 proc을 다시 추가하려고 했습니까 ?? 추가 한 후에 업데이트 한 경우 해당 모델은 해당 업데이트를 선택하지 않았을 것입니다 ... –

+0

제거한 후 다시 추가했지만 반환 유형은 여전히 ​​"(없음)"입니다. 그러나, 나는 .PurgeFoo()를 호출하려고했는데 리턴 타입이 다르게 말하는 경우에도 INT를 리턴한다. – acermate433s

답변

2

SELECT로 돌아갈 수 있습니다. 이렇게하면 적절한 레코드 세트를 얻을 수 있습니다.

CREATE PROCEDURE PurgeFoo 
AS 
DELETE FROM Foo 
SELECT @@ROWCOUNT AS RowsDeleted 
GO 

정도 같은 출력 매개 변수 :

CREATE PROCEDURE PurgeFoo 
    @RowsDeleted int = 0 OUTPUT 
AS 
DELETE FROM Foo 
SET @RowsDeleted = @@ROWCOUNT 
GO 

반환 값이 상태 및 오류 코드가 아닌 의미있는 데이터에 가장 유용합니다.

+0

상태 및 오류 코드에 RETURN 값을 사용해야한다는 점에 관해 나는 완전히 이해하고 동의합니다. 나는 이해하기 쉬운이 질문에 내 저장 프로 시저를 간소화했다. – acermate433s

0

모든 행이 삭제 되었기 때문에 행을 삭제하기 전에 행을 계산하려면 SELECT COUNT (*) FROM FUE를 사용하지 마십시오. 다음과 같은 것 :

CREATE PROCEDURE PurgeFoo 
@Rows INT OUTPUT 
AS 
SET @Rows = SELECT COUNT(*) FROM Foo 
DELETE FROM Foo 

그런 다음 SP를 호출하면 출력 매개 변수의 값을 INT로 얻을 수 있습니다. 또한 SELECT 문을 더 빨리 실행하려는 * 열을 변경할 수 있습니다.

+0

나는 또한 그것을 시도했다. 그러나 단지 no를 얻는 새로운 매개 변수를 만들고 싶지 않다. 영향을받은 기록. – acermate433s