복붙노트

[SQL] SQL 서버 - INSERT 후 반환 값

SQL

SQL 서버 - INSERT 후 반환 값

나는 INSERT 문 후 키 - 값 다시 얻기 위해 노력하고있어. 예: 나는 속성 이름과 ID를 가진 테이블을 가지고있다. ID는 생성 된 값이다.

    INSERT INTO table (name) VALUES('bob');

지금은 같은 단계의 id 다시 싶어. 어떻게 이런 일을합니까?

우리는 마이크로 소프트 SQL 서버 2008을 사용하고 있습니다.

해결법

  1. ==============================

    1.별도의 SELECT에 대한 필요가 없습니다 ...

    별도의 SELECT에 대한 필요가 없습니다 ...

    INSERT INTO table (name)
    OUTPUT Inserted.ID
    VALUES('bob');
    

    (예 : GUID를 같은) 비 IDENTITY 열에 대한이 작품도

  2. ==============================

    2.사용 SCOPE_IDENTITY ()는 새로운 ID 값을 얻을 수

    사용 SCOPE_IDENTITY ()는 새로운 ID 값을 얻을 수

    INSERT INTO table (name) VALUES('bob');
    
    SELECT SCOPE_IDENTITY()
    

    http://msdn.microsoft.com/en-us/library/ms190315.aspx

  3. ==============================

    3.

    INSERT INTO files (title) VALUES ('whatever'); 
    SELECT * FROM files WHERE id = SCOPE_IDENTITY();
    

    트리거가있는 테이블에 OUTPUT 절 충돌 알려진 문제가 있기 때문에 가장 안전한 내기입니다. 만든다 테이블은 현재 어떤 트리거이없는 경우에도 같은이 매우 신뢰할 수없는 - 사람이 응용 프로그램을 중단 할 선을 하나 추가합니다. 행동의 시한 폭탄의 일종.

    더 깊은 설명은 MSDN 문서를 참조하십시오

    http://blogs.msdn.com/b/sqlprogrammability/archive/2008/07/11/update-with-output-clause-triggers-and-sqlmoreresults.aspx

  4. ==============================

    4.엔티티 프레임 워크는 GBN의 대답에 비슷한 일을 수행한다 :

    엔티티 프레임 워크는 GBN의 대답에 비슷한 일을 수행한다 :

    DECLARE @generated_keys table([Id] uniqueidentifier)
    
    INSERT INTO Customers(FirstName)
    OUTPUT inserted.CustomerID INTO @generated_keys
    VALUES('bob');
    
    SELECT t.[CustomerID]
    FROM @generated_keys AS g 
       JOIN dbo.Customers AS t 
       ON g.Id = t.CustomerID
    WHERE @@ROWCOUNT > 0
    

    출력 결과는 표 임시 변수에 저장하고 클라이언트로 선택된다. 잡았다 알고 있어야 :

    나는 EF는 내부 (상황이 두 가지가 일치하지 않을 것을 아래) 실제 테이블에 임시 테이블 다시 가입 왜 아무 생각이 없습니다.

    그러나 EF는 수행의 어떤 것을.

    SQL Server 2008 또는 최신에만. 그 다음 2005 년의 경우에 당신은 운입니다.

  5. ==============================

    5.@@ IDENTITY는 마지막으로 삽입 한 ID 값을 반환하는 시스템 기능입니다.

    @@ IDENTITY는 마지막으로 삽입 한 ID 값을 반환하는 시스템 기능입니다.

  6. ==============================

    6.가장 좋고 가장 확실 솔루션 SCOPE_IDENTITY를 사용한다 ().

    가장 좋고 가장 확실 솔루션 SCOPE_IDENTITY를 사용한다 ().

    그냥 당신은 당신이 동일한 범위에 두 개의 인서트를 호출 할 수 있기 때문에 모든 삽입 한 후 범위 ID를 얻고 변수에 저장해야합니다.

    IDENT_CURRENT 및 @@ IDENTITY는 작동 할 수 있지만 안전 범위를하지 않습니다. 당신은 큰 응용 프로그램에 문제가있을 수 있습니다

      declare @duplicataId int
      select @duplicataId =   (SELECT SCOPE_IDENTITY())
    

    자세한 내용은 여기에 마이크로 소프트 워드 프로세서입니다

  7. ==============================

    7.당신은) (다음 바로 ID가 당신이 SCOPE_IDENTITY에서 가져온 신원을 = 그 테이블에서 당신이 원하는대로 열을 선택 당신은 그냥 변수에 삽입 된 행의 ID를 선택 SCOPE_IDENTITY ()를 사용할 수 있습니다

    당신은) (다음 바로 ID가 당신이 SCOPE_IDENTITY에서 가져온 신원을 = 그 테이블에서 당신이 원하는대로 열을 선택 당신은 그냥 변수에 삽입 된 행의 ID를 선택 SCOPE_IDENTITY ()를 사용할 수 있습니다

    은 MSDN 정보 http://msdn.microsoft.com/en-us/library/ms190315.aspx 여기를 참조하십시오

  8. ==============================

    8.삽입 후 종료하는 방법에는 여러 가지가 있습니다

    삽입 후 종료하는 방법에는 여러 가지가 있습니다

    DECLARE @MyTableVar TABLE (id INT,NAME NVARCHAR(50));
    
    INSERT INTO tableName
    (
      NAME,....
    )OUTPUT INSERTED.id,INSERTED.Name INTO @MyTableVar
    VALUES
    (
       'test',...
    )
    

    IDENT_CURRENT : 그것은 어떤 세션에서 특정 테이블 또는 뷰에 대해 생성 된 마지막 ID를 반환합니다.

    SELECT IDENT_CURRENT('tableName') AS [IDENT_CURRENT]
    

    SCOPE_IDENTITY : 그것은 동일한 세션과 같은 범위에서 마지막 ID를 반환합니다. 스코프 등 저장된 프로 시저 / 트리거 인

    SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];  
    

    @@ IDENTITY : 그것은 동일한 세션에서 마지막 ID를 반환합니다.

    SELECT @@IDENTITY AS [@@IDENTITY];
    
  9. ==============================

    9.내가 OUTPUT INSERTED을 사용하는 방법이다, SQL Server의 ID 열로 ID를 사용하는 테이블에 삽입 할 때 :

    내가 OUTPUT INSERTED을 사용하는 방법이다, SQL Server의 ID 열로 ID를 사용하는 테이블에 삽입 할 때 :

    'myConn is the ADO connection, RS a recordset and ID an integer
    Set RS=myConn.Execute("INSERT INTO M2_VOTELIST(PRODUCER_ID,TITLE,TIMEU) OUTPUT INSERTED.ID VALUES ('Gator','Test',GETDATE())")
    ID=RS(0)
    
  10. ==============================

    10.당신은 당신의 INSERT 문에 SELECT 문을 추가 할 수 있습니다. 정수 민트 = 표에 삽입 (FNAME) 값 ( '프레드'); SCOPE_IDENTITY ()를 선택합니다; 스케일러를 실행 할 때 신원의 값을 반환합니다.

    당신은 당신의 INSERT 문에 SELECT 문을 추가 할 수 있습니다. 정수 민트 = 표에 삽입 (FNAME) 값 ( '프레드'); SCOPE_IDENTITY ()를 선택합니다; 스케일러를 실행 할 때 신원의 값을 반환합니다.

  11. ==============================

    11.* 연결 문자열 매개 변수 순서는 때때로 중요하다. * 공급자 매개 변수의 위치는 행을 추가 한 후 레코드 커서를 깰 수 있습니다. 우리는 SQLOLEDB 공급자와이 동작을 보았다.

    * 연결 문자열 매개 변수 순서는 때때로 중요하다. * 공급자 매개 변수의 위치는 행을 추가 한 후 레코드 커서를 깰 수 있습니다. 우리는 SQLOLEDB 공급자와이 동작을 보았다.

    행이 추가되면 공급자는 연결 문자열에서 첫 번째 매개 변수로 지정되지 않는 한, 행 필드는 사용할 수 없습니다. 공급자가 어디 첫 번째 매개 변수로 제외하고는 연결 문자열의 경우, 새로 삽입 된 행 필드는 사용할 수 없습니다. 우리가 첫 번째 매개 변수로 공급자를 이동하는 경우, 행 마술 나타났다 필드를 표시합니다.

  12. ==============================

    12.ID 열이있는 테이블에 삽입을 수행 한 후 값을 얻기 위해 @@ IDENTITY를 참조 할 수 있습니다 : http://msdn.microsoft.com/en-us/library/aa933167%28v=sql.80%29.aspx

    ID 열이있는 테이블에 삽입을 수행 한 후 값을 얻기 위해 @@ IDENTITY를 참조 할 수 있습니다 : http://msdn.microsoft.com/en-us/library/aa933167%28v=sql.80%29.aspx

  13. from https://stackoverflow.com/questions/7917695/sql-server-return-value-after-insert by cc-by-sa and MIT license