2008-10-29 4 views

답변

10

마지막 SERIAL 삽입 값은 sqlerrd 배열의 두 번째 항목으로 SQLCA 레코드에 저장됩니다. Brian의 대답은 ESQL/C에 맞지만 사용자가 사용하는 언어는 언급하지 않았습니다. 저장 프로 시저를 작성하는 경우

, 값 따라서 찾을 수 있습니다 다른 언어/인터페이스에 대한 변형이 있습니다 DBI

사용하는 경우

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

또한 $sth->{ix_sqlerrd}[1]에서 찾을 수 있습니다, 하지만 당신이 그 아이디어를 얻을 것이라고 확신합니다.

1

을 복제하는 방법을 찾고 있습니다.

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

어떤 언어입니까? 파스칼이야? 그리고 부정 된 ABS는 조금 이상합니다. (슬프게도 적어도 하나의 긍정적 인 오류가있는) 연결을 설정하지 않으면 Informix의 모든 오류 번호가 부정적입니다. –

-1

나는 "효율적인"이 당신이 찾고있는 단어라고 생각하지 않습니다. 그것은 정확성에 관한 문제입니다. SQL Books Online보다 더 잘 설명 할 수 있을지 모르겠지만, 일반적으로 내가하는 일을 정말로 알지 못하고 @@ IDENTITY를 사용하는 특정 이유가 없으면 SCOPE_IDENTITY를 사용하십시오. 이것에 대한 가장 명백한 이유는 @@ IDENTITY가 테이블에 트리거가 연결되어 있으면 프로그램/sp/etc에 의해 추가 된 최신 레코드의 ID를 반환하지 않기 때문입니다. 또한,-

  • 다른 사용자의 삽입
  • 반환하는 다른 사용자의 ID를 귀하의 삽입

    1. ... 두 개의 트랜잭션이 동시에 발생하고 다음이 발생할 수있는 대량의 응용 프로그램에 문제가있을 수 있습니다
  • +0

    질문이 MS SQL이 아닌 Informix에 관한 것임을 알 수 있습니다. –

    -5

    OP가 사용중인 Informix 버전을 지정하지 않았기 때문에 다른 대답이있을 수 있습니다.

    +3

    신뢰할 수 없습니다. 다른 사람이 귀하의 삽입 이후로 ​​더 큰 더 큰 값을 삽입했을 수 있습니다. –

    +0

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

    관련 문제