문제

삽입문 후 직렬 열의 값을 얻는 가장 효율적인 방법은 무엇입니까? 즉, 복제 방법을 찾고 있습니다 @@IDENTITY 또는 SCOPE_IDENTITY MS SQL의 기능

도움이 되었습니까?

해결책

마지막 직렬 삽입물의 값은 SQLERRD 어레이의 두 번째 항목으로 SQLCA 레코드에 저장됩니다. Brian의 대답은 ESQL/C에 맞지만 사용중인 언어를 언급하지 않았습니다.

저장된 절차를 작성하는 경우 값을 다음과 같이 찾을 수 있습니다.

LET new_id = DBINFO('sqlca.sqlerrd1');

또한 찾을 수 있습니다 $sth->{ix_sqlerrd}[1] DBI를 사용하는 경우

다른 언어/인터페이스에는 변형이 있지만 아이디어를 얻을 것이라고 확신합니다.

다른 팁

나는 이것이 사용 된 것을 보았다.

if LOCAL_SQLCA^.sqlcode = 0 then
/ return serial */
  Result := LOCAL_SQLCA^.sqlerrd[1]
else
/* return error code */
  Result := -(Abs(LOCAL_SQLCA^.sqlcode));

나는 "효율적"이 당신이 여기서 찾고있는 단어라고 생각하지 않습니다. 정확성의 문제입니다. 나는 온라인에서 SQL Books가 할 수있는 것보다 더 나은 일을 할 수 있는지 확신 할 수 없지만 일반적으로, 당신이하고있는 일을 정말로 알고 있고 @@ Identity를 사용하는 특정한 이유가 없다면, scope_identity를 사용하십시오. 이에 대한 가장 분명한 이유는 @@ Identity가 테이블에 트리거가 첨부 된 경우 프로그램/SP/등이 추가 한 최신 레코드의 ID를 반환하지 않기 때문입니다. 또한 두 개의 트랜잭션이 동시에 발생하고 다음이 발생하는 대량 응용 프로그램에 문제가있을 수 있습니다 ...

  1. 삽입
  2. 다른 사용자의 삽입
  3. 다른 사용자의 신원을 귀하에게 반환하십시오

OP는 어떤 버전의 Informix가 사용되는지를 지정하지 않았으므로 다른 답변이있을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top