2010-06-23 8 views
3

외래 키와 연결된 두 개의 테이블이 있습니다. 한 테이블에서 몇 가지 삽입을 수행 한 다음 ID 열 값을 사용하여 다음 번에 삽입 문을 배치해야합니다. 이 모든 것은 SQL을 통해 수행되어야합니다.방금 ​​삽입 한 행의 ID 가져 오기

나는 SCOPE_IDENTITY()에 대해 읽었지 만 모든 예제에서 ASP/PHP/삽입의 다음 일괄 처리에서 대체를 수행하는 모든 방법을 사용하고 있습니다.이 옵션이 없습니다.

감사합니다.

답변

0

SQL 또는 TSQL에서도 동일한 작업을 수행 할 수 있습니다. 삽입을 마치 자마자 식별 열을 지정하면됩니다.

0

동일한 블록의 삽입 문 후

SELECT SCOPE_IDENTITY() [Iden] 

를 사용할 수 있습니다. 이것은 효과가있다.

0
-- Variable to hold new Id 
Declare @NewId int 

--Insert some values in to create a new ID 
Insert Into dbo.MyTable1 (Col1) 
Values (@NewValue) 

-- Grab the new Id and store it in the variable 
Select @NewId = Scope_Identity() 

--Insert the new Id in to another table 
Insert Into dbo.AnotherTable (Col1) 
Values (@NewId) 
1

사용

SCOPE_IDENTITY() - Function 

대신

@@IDENTITY Variable - 
그렇지 않으면

마지막 삽입 정체성의 결과를 얻을 - 어딘가에 삽입 당신이 얻을 것보다 테이블에 트리거가있는 경우 잘못된 결과 (트리거에 의해 삽입 된 값이 아니라 진술에 의해 삽입 된 값). Scope_Identity는 명령문의 ID를 반환하며 사용자가 일반적으로 원하는 것입니다.

1

SQl 서버 2008에서는 OUTPUT 절을 사용할 수도 있습니다. 당신은 당신이 모든 ID를 얻을 수 있습니다, 당신은 또한 당신이해야 할 수도 있습니다 다른 모든 필드를 반환 할 수 있습니다 대신 하나의 기록의 무리를 삽입하는 데 사용하는 경우이 espcially 가치있게 무엇

DECLARE @output TABLE (myid INT) 

INSERT mytable (field1, field2) 
    OUTPUT inserted.myid INTO @output 
VALUES ('test', 'test') 

SELECT * FROM @output 

이다.

뭔가 같은 :

DECLARE @output TABLE (myid INT, field1 datetime) 

INSERT mytable (field1, field2) 
    OUTPUT inserted.myid, inserted.field1 INTO @output 
Select '20100101', field3 from mytable2 

SELECT * FROM @output 
관련 문제