[sql-server] select SCOPE_IDENTITY ()가 정수 대신 십진수를 반환하는 이유는 무엇입니까?

따라서 기본 키로 ID 열이있는 테이블이 있으므로 정수입니다. 그렇다면 왜 SCOPE_IDENTITY()항상 내 C # 응용 프로그램에 int 대신 십진수 값을 반환합니까? 이것은 십진수 값이 C #에서 암시 적으로 정수로 변환되지 않기 때문에 정말 성가신 일입니다. 즉, SQL Server와 Postgres를 사용하기 때문에 많은 항목을 다시 작성하고 많은 도우미 메서드를 가지고 있어야합니다. Postgres는이를 위해 정수를 반환합니다. 동등한 기능 ..

SCOPE_IDENTITY()일반 정수를 반환 하지 않는 이유는 무엇 입니까? 일반적으로 기본 키에 십진수 / 비 ID 값을 사용하는 사람들이 있습니까?



답변

SQL Server에서 IDENTITY속성에 할당 할 수 있습니다 tinyint, smallint, int, bigint, decimal(p, 0), 또는 numeric(p, 0)열. 따라서 SCOPE_IDENTITY함수는 위의 모든 것을 포함 할 수있는 데이터 유형을 반환해야합니다.

이전 답변에서 말했듯이 int반환하기 전에 서버에서 캐스트하면 ADO.NET이 예상대로 유형을 감지합니다.


답변

쿼리 또는 저장된 proc에서 반환하기 전에 캐스팅 할 수 없습니까 (SP는 항상 int를 반환하지만 출력 매개 변수를 사용하고있을 수 있음)?

처럼 SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY

그리고 왜 이렇게합니까? 아마도 더 유연하고 더 많은 수를 처리 할 것입니다.


답변

범위 ID 반환 값은 decimal (38,0)입니다.

CAST, OUTPUT 절 사용 또는 SELECT SCOPE_IDENTITY()클라이언트가 아닌 출력 매개 변수에 할당


답변

이것을 사용하면 정수를 다시 얻을 수 있습니다.

ExecuteScalar('insert...; select CONVERT(int,scope_identity())');


답변