SQL Server에서는 Insert가 실행될 때 레코드의 "id"를 얻을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/55159

  •  09-06-2019
  •  | 
  •  

문제

SQL Server 2005에는 "Is Identity" 속성이 'Yes'로 설정된 테이블에 "id" 필드가 있습니다.따라서 해당 테이블에서 삽입이 실행되면 "id"가 자동으로 다음 증분 정수로 설정됩니다.Insert 직후에 Select 문을 수행하지 않고도 Insert가 실행될 때 "id"가 설정된 것을 가져오는 쉬운 방법이 있습니까?

중복:
삽입된 행의 ID를 얻는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

적어도 .Net에서는 한 번에 여러 쿼리를 서버에 보낼 수 있습니다.내 앱에서 이 작업을 수행합니다.

command.CommandText = "INSERT INTO [Employee] (Name) VALUES (@Name); SELECT SCOPE_IDENTITY()";
int id = (int)command.ExecuteScalar();

매력처럼 작동합니다.

다른 팁

여러 행을 삽입하는 경우 OUTPUT 그리고 INSERTED.columnname 에 대한 조항 insert 문은 모든 ID를 임시 테이블로 가져오는 간단한 방법입니다.

DECLARE @MyTableVar table( ID int,  
                               Name varchar(50),  
                               ModifiedDate datetime);  
INSERT MyTable  
        OUTPUT INSERTED.ID, INSERTED.Name, INSERTED.ModifiedDate INTO @MyTableVar  
SELECT someName, GetDate() from SomeTable  

Scope_identity()가 선호되는 방법입니다. 다음을 참조하세요. 현재 ID 값을 얻는 6가지 방법

SCOPE_IDENTITY();최선의 방법입니다..NET을 사용하는 경우 매개변수를 전달하고 프로시저가 실행된 후 값을 확인하세요.

CREATE PROCEDURE [dbo].[InsertProducts]
    @id             INT             = NULL OUT,
    @name           VARCHAR(150)    = NULL,
    @desc           VARCHAR(250)    = NULL

AS

    INSERT INTO dbo.Products
       (Name,
        Description)
    VALUES
       (@name,
        @desc)

    SET @id = SCOPE_IDENTITY();

scope_identity() 함수를 선택해야 합니다.

애플리케이션 코드에서 이 작업을 수행하려면 일반적으로 이 프로세스를 저장 프로시저에 캡슐화하여 내 애플리케이션에 대한 하나의 쿼리처럼 보이도록 합니다.

나는 엔터프라이즈 관리자를 사용하여 테이블에 트리거를 연결하는 것을 선호하는 경향이 있습니다.이렇게 하면 코드에 추가 SQL 문을 작성하는 것에 대해 걱정할 필요가 없습니다.내 모습은 다음과 같습니다.

dbo.tblname as select new_id = @@ evenity에서 trigger tblname 생성

그런 다음 코드 내에서 삽입 문을 선택 문처럼 처리합니다. 실행하고 결과를 평가하기만 하면 됩니다."newID" 열에는 방금 생성한 행의 ID가 포함됩니다.

이것은 아마도 내가 SQL Server에서 찾은 가장 효과적인 솔루션일 것입니다.SQL Server는 삽입 문 후에 ID 열의 값을 반환합니다.

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