외래 키와 연결된 두 개의 테이블이 있습니다. 한 테이블에서 몇 가지 삽입을 수행 한 다음 ID 열 값을 사용하여 다음 번에 삽입 문을 배치해야합니다. 이 모든 것은 SQL을 통해 수행되어야합니다.방금 삽입 한 행의 ID 가져 오기
나는 SCOPE_IDENTITY()에 대해 읽었지 만 모든 예제에서 ASP/PHP/삽입의 다음 일괄 처리에서 대체를 수행하는 모든 방법을 사용하고 있습니다.이 옵션이 없습니다.
감사합니다.
외래 키와 연결된 두 개의 테이블이 있습니다. 한 테이블에서 몇 가지 삽입을 수행 한 다음 ID 열 값을 사용하여 다음 번에 삽입 문을 배치해야합니다. 이 모든 것은 SQL을 통해 수행되어야합니다.방금 삽입 한 행의 ID 가져 오기
나는 SCOPE_IDENTITY()에 대해 읽었지 만 모든 예제에서 ASP/PHP/삽입의 다음 일괄 처리에서 대체를 수행하는 모든 방법을 사용하고 있습니다.이 옵션이 없습니다.
감사합니다.
SQL 또는 TSQL에서도 동일한 작업을 수행 할 수 있습니다. 삽입을 마치 자마자 식별 열을 지정하면됩니다.
동일한 블록의 삽입 문 후
SELECT SCOPE_IDENTITY() [Iden]
를 사용할 수 있습니다. 이것은 효과가있다.
-- 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)
사용
SCOPE_IDENTITY() - Function
대신
@@IDENTITY Variable -
그렇지 않으면
마지막 삽입 정체성의 결과를 얻을 - 어딘가에 삽입 당신이 얻을 것보다 테이블에 트리거가있는 경우 잘못된 결과 (트리거에 의해 삽입 된 값이 아니라 진술에 의해 삽입 된 값). Scope_Identity는 명령문의 ID를 반환하며 사용자가 일반적으로 원하는 것입니다.
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