저희 회사에서는 4 가지 유형의 간단한 저장 프로 시저 (삽입, 업데이트, 삭제, 선택)를 사용하고 있습니다. 데이터베이스 그룹은 모든 단일 저장 프로 시저가 업데이트/삭제/삽입 저장 프로 시저 유형에 대한 반환 값에 "오류 코드"를 포함해야한다는 규칙을 유지합니다.저장 프로 시저 우수 사례에서 오류 코드 값을 반환하고 있습니까?
는 설명하기 위해 우리가 기존 ASP/VB6.0을 사용할 때이 규칙은 나이를 거슬러 올라간다
-------------------
--INSERT sp example
-------------------
INSERT INTO dbo.SomeTable(..) VALUES(...)
if @@error <> 0
return -1
return 0
-------------------
--UPDATE sp example
-------------------
declare
@errsql int
@updcount int
update dbo.SomeTable set foo = @bar
select @errsql = @@error, @updcount = @@rowcount
if @errSQL <> 0
return -1
if @updcount < 1
return -2
return 0
-------------------
--DELETE sp example
-------------------
delete from dbo.SomeTable where ...
if @@error <> 0
return -1
return 0
을; 그러나 오랫동안 우리 플랫폼은 순수 .NET이며 SQL 측의 오류 (기본 키 위반/고유 인덱스 위반 등)는 .NET 예외로 응용 프로그램에 전송되므로이 패턴을 따르는 것이화물 컬트 프로그래밍 업데이트 검사 행 개수가 일부 시나리오에서는 유용 할 수 있습니다. 여전히 데이터베이스 그룹이 아니라 응용 프로그램 개발자가 주도해야합니다. 결국에는 응용 프로그램에서 반환 코드를 확인해야만합니다. :)
제 질문은 -이 연습에서는 어떤 이점이 있습니까? 아니면 고전적인 cargo 컬트 프로그래밍 예제입니까?
목표가 가능한 유용한 오류 값을 상수로 대체하는 것으로 흥미 롭습니다. 그리고 try/catch는 사용하지 않습니다. 또는 기타 도움이되는 출력 (예 : 대부분의 경우 0보다 커야하는 삭제 된 행 수입니다. 유용한 진단 정보를 제공하기 위해'RaIsError'를 사용하는 것을 선호합니다. (우리는 마이크로 소프트의 또 다른 모음을 사기를 원합니까?) – HABO
왜 'RAISERROR'를 사용하지 않습니까? –
@SriramSakthivel - SQL에서 .NET으로 예외를 throw하는 방법이 아닙니다. "select 이외의 모든 단일 저장 프로 시저가 오류 코드를 반환해야합니다"및 해당 유효성 –