수색…


SCOPE_IDENTITY ()

CREATE TABLE dbo.logging_table(log_id INT IDENTITY(1,1) PRIMARY KEY, 
                               log_message VARCHAR(255))

CREATE TABLE dbo.person(person_id INT IDENTITY(1,1) PRIMARY KEY, 
                        person_name VARCHAR(100) NOT NULL)
GO;

CREATE TRIGGER dbo.InsertToADifferentTable ON dbo.person  
AFTER INSERT  
AS
    INSERT INTO dbo.logging_table(log_message)
    VALUES('Someone added something to the person table')
GO;

INSERT INTO dbo.person(person_name)
VALUES('John Doe')  

SELECT SCOPE_IDENTITY();

현재 범위 내에서 동일한 연결에서 생성 된 가장 최근에 추가 된 ID 값을 반환합니다. 이 경우 dbo.person 테이블의 첫 번째 행에 대해 1입니다.

@@정체

CREATE TABLE dbo.logging_table(log_id INT IDENTITY(1,1) PRIMARY KEY, 
                               log_message VARCHAR(255))

CREATE TABLE dbo.person(person_id INT IDENTITY(1,1) PRIMARY KEY, 
                        person_name VARCHAR(100) NOT NULL)
GO;

CREATE TRIGGER dbo.InsertToADifferentTable ON dbo.person  
AFTER INSERT  
AS
    INSERT INTO dbo.logging_table(log_message)
    VALUES('Someone added something to the person table')
GO;

INSERT INTO dbo.person(person_name)
VALUES('John Doe')    

SELECT @@IDENTITY;

이렇게하면 범위에 관계없이 동일한 연결에서 가장 최근 추가 된 ID가 반환됩니다. 이 경우 logging_table의 ID 열의 현재 값이 무엇이든간에 SQL Server 인스턴스에서 다른 활동이 발생하지 않고이 삽입에서 다른 트리거가 실행되지 않는다고 가정합니다.

IDENT_CURRENT ( 'tablename')

SELECT IDENT_CURRENT('dbo.person');

연결 또는 범위에 관계없이 선택한 테이블에서 가장 최근에 추가 된 ID 값이 선택됩니다.

@@ IDENTITY 및 MAX (ID)

SELECT MAX(Id) FROM Employees -- Display the value of Id in the last row in Employees table.
GO
INSERT INTO Employees (FName, LName, PhoneNumber) -- Insert a new row 
VALUES ('John', 'Smith', '25558696525') 
GO  
SELECT @@IDENTITY 
GO  
SELECT MAX(Id) FROM Employees -- Display the value of Id of the newly inserted row.  
GO

마지막 두 SELECT 문 값은 같습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow