2011-07-18 3 views
1

전달 된 매개 변수가 비즈니스 규칙을 위반하지 않는지 확인하기 위해 일부 코드를 실행하는 저장 프로 시저 (예 : sp1)가 있습니다. 유효성 검사 후에 테이블에 레코드를 실제로 삽입하는 다른 저장 프로 시저 (예 : sp2)를 호출합니다.SCOPE_IDENTITY - 삽입 프로 시저를 호출하는 절차

제 질문은 SCOPE_IDENTITYsp1에 넣으면 IDENTITYsp2에 넣을 수 있습니까?

답변

4

SCOPE_IDENTITY()은 범위의 최신 ID를 제공하므로 sql이 "GO"에 도달하여 새 범위가 만들어지고 ID를받지 못하면 sp2에 출력 매개 변수를 추가하여 ID를 수신 할 수 있습니다 아마도 가장 좋은 방법 일 것입니다.

3

Joakim이 말한 것처럼 SCOPE_IDENTITY()은 두 번째 절차에서 신원 정보를 반환하지 않습니다. MSDN 문서에서 SCOPE_IDENTITY()

범위는 저장 프로 시저, 트리거, 기능 또는 배치입니다. 따라서 두 개의 명령문은 동일한 저장 프로 시저, 함수 또는 일괄 처리에있는 에있는 경우 동일한 범위에 있습니다.

@@Identity 당신이 원하는 방식으로 행동하지만 트리거을 포함하여 현재 연결 내부의 최신 정체성을 집어 주요 단점을 가지고 않습니다. 관련 테이블에 트리거가 없다는 것을 100 % 확실하다고해도 나중에 트리거를 추가하는 사람은이를 중단하고 버그를 찾기 위해 까다로운 방법을 사용하므로 출력 매개 변수를 사용하는 것이 얼마나 간단한지를 알기 때문에 @@Identity.

+0

지금 어떤 트리거가없는 경우에도 당신이 @@ IDENTITY를 사용하는 경우이 끊어집니다 나중에 하나를 추가 . – HLGEM

+0

@HLGEM 나는 "결코 없을 것"이라고 쓰지 만 그 점을 명확하게하기 위해 편집 할 것입니다. –

0

언제든지 으로 캡슐화하고 캡슐화해야합니다. SP2 새 범위의 ID 값을 반환합니다. SP2 새 범위의 ID 값을 반환해야합니다. RETURN 값 또는 OUT 매개 변수로 리턴 될 수 있습니다.

항상 전역을 피하는 것이 가장 좋습니다.

1

삽입을 수행하는 프로세스에서 원하는 ID 값을 보유하도록 출력 매개 변수를 만듭니다. 그리고 scope_identitiy 또는 출력 절의 결과를 사용하여 그것을 podpulate하십시오.

는 그런 다음 호출 proc 디렉토리에 같은 이름의 변수를 생성하고 PROC이 방법을 호출

exec @id = usp_my_proc @someinputvariable, @someotherinputvariable 
관련 문제