sql-server - 프로시저 - 함수 에 포함 된 select 문 에서 클라이언트 로 데이터 를 반환 할 수 없습니다




저장 프로 시저-출력 매개 변수 또는 스칼라로 ID를 반환합니다. (4)

ID 매개 변수 값을 출력 매개 변수로 반환하는 것을 선호합니다. SP의 결과는 성공했는지 여부를 나타냅니다. 값 0은 SP가 성공적으로 완료되었음을 나타내며, 0이 아닌 값은 오류를 나타냅니다. 또한 변경을 수행하고 SP에서 추가 값을 반환해야하는 경우 추가 출력 매개 변수를 추가하는 것 외에는 변경할 필요가 없습니다.

식별 컬럼이있는 테이블에 레코드를 삽입 할 때 SCOPE_IDENTITY ()를 사용하여 그 값을 얻을 수 있습니다. 저장 프로 시저의 컨텍스트 내에서 ID 값을 반환하는 데 권장되는 방법은 다음과 같습니다.

  1. 출력 매개 변수로 SET @RETURN_VALUE = SCOPE_IDENTITY()
  2. 스칼라 SELECT SCOPE_IDENTITY()
  3. 또 다른 방법?

각 장단점은 무엇입니까?


그것의 모든 클라이언트 데이터 액세스 레이어에 의존합니다. 많은 ORM 프레임 워크는 삽입 작업 중에 명시 적으로 SCOPE_IDENTITY를 쿼리합니다.

데이터 액세스 레이어를 완벽하게 제어한다면 SCOPE_IDENTITY ()를 출력 매개 변수로 반환하는 것이 좋습니다. 결과 집합의 반환 값을 래핑하면 결과 집합을 설명하기 위해 불필요한 메타 데이터 오버 헤드가 추가되고 요청 결과를 처리하기 위해 코드가 복잡해집니다.

결과 집합 반환을 원하면 다시 OUTPUT 절을 사용하는 것이 좋습니다.

INSERT INTO  MyTable (col1, col2, col3)
OUTPUT INSERTED.id, col1, col2, col3
VALUES (@col1, @col2, @col3);

이렇게하면 기본 열과 계산 된 열을 포함하여 삽입 된 전체 행을 다시 가져올 수 있으며 삽입 된 각 행에 대해 하나의 행을 포함하는 결과 집합을 얻을 수 있습니다. 이는 집합 지향 배치 삽입으로 올바르게 작동합니다.

전반적으로 SCOPE_IDENTITY() 를 반환하면 결과 집합이 좋은 사례가 될 수 있기 때문에 한 가지 사례를 볼 수 없습니다.


레코드 세트 또는 출력 매개 변수 중 하나입니다. 후자는 오버 헤드가 적어서 단일 열 / 행 레코드 세트가 아니라이를 사용하는 경향이 있습니다.

만약 내가> 1 행에 OUTPUT 절과 레코드 셋을 사용할 것으로 예상된다면

반환 값은 일반적으로 오류 처리에 사용됩니다.


SELECT IDENT_CURRENT('databasename.dbo.tablename') AS your identity column;




stored-procedures