SCOPE_IDENTITY() 関数を使用して最後の挿入行 ID を取得する方法
SQL Server で最後の挿入行 ID を取得する方法
SCOPE_IDENTITY()
関数は、現在のセッションで最後に挿入された行の ID を返します。この関数は、INSERT ステートメントを実行した直後にのみ使用できます。
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
SELECT SCOPE_IDENTITY();
このコードは、Customers
テーブルに新しい行を挿入し、その行の ID を SCOPE_IDENTITY()
関数を使用して取得します。
IDENTITY 列は、自動的にインクリメントされる列です。新しい行が挿入されると、IDENTITY 列には新しい値が割り当てられます。IDENTITY 列の値を取得するには、INSERT ステートメントの OUTPUT
句を使用できます。
INSERT INTO Customers (FirstName, LastName, OUTPUT INSERTED.CustomerID)
VALUES ('John', 'Doe');
DECLARE @CustomerID INT;
SELECT @CustomerID = INSERTED.CustomerID;
PRINT @CustomerID;
このコードは、Customers
テーブルに新しい行を挿入し、その行の ID を OUTPUT
句を使用して取得します。INSERTED
疑似テーブルには、挿入された行のデータが含まれます。
ROW_NUMBER() 関数は、ウィンドウ内の行に順序番号を割り当てます。この関数は、挿入された行をウィンドウ内の最後の行として識別するために使用できます。
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
SELECT CustomerID, ROW_NUMBER() OVER (ORDER BY CustomerID DESC) AS RowNumber
FROM Customers;
このコードは、Customers
テーブルに新しい行を挿入し、その行の RowNumber を取得します。RowNumber は、挿入された行が最後の行であることを示します。
- IDENTITY 列を使用すると、INSERT ステートメントを実行した後で ID を取得できます。ただし、IDENTITY 列を使用するには、テーブルに IDENTITY 列を作成する必要があります。
- ROW_NUMBER() 関数は、より複雑な方法ですが、挿入された行が最後の行であることを確認するために使用できます。
その他の注意事項
- 上記のコード例は、SQL Server 2008 以降で使用できます。
- IDENTITY 列を使用する場合は、テーブルに PRIMARY KEY 列も作成する必要があります。
- ROW_NUMBER() 関数は、パフォーマンスが低下する可能性があるため、大量のデータに対して使用する場合は注意が必要です。
SCOPE_IDENTITY() 関数を使用する
-- Customers テーブルを作成する
CREATE TABLE Customers (
CustomerID INT IDENTITY(1,1) PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50)
);
-- 新しい行を挿入する
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
-- 最後の挿入行 ID を取得する
SELECT SCOPE_IDENTITY();
IDENTITY 列を使用する
-- Customers テーブルを作成する
CREATE TABLE Customers (
CustomerID INT IDENTITY(1,1) PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50)
);
-- 新しい行を挿入し、挿入された行 ID を取得する
INSERT INTO Customers (FirstName, LastName, OUTPUT INSERTED.CustomerID)
VALUES ('John', 'Doe');
DECLARE @CustomerID INT;
SELECT @CustomerID = INSERTED.CustomerID;
PRINT @CustomerID;
ROW_NUMBER() 関数を使用する
-- Customers テーブルを作成する
CREATE TABLE Customers (
CustomerID INT IDENTITY(1,1) PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50)
);
-- 新しい行を挿入する
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
-- 最後の挿入行の RowNumber を取得する
SELECT CustomerID, ROW_NUMBER() OVER (ORDER BY CustomerID DESC) AS RowNumber
FROM Customers;
SQL Server で最後の挿入行 ID を取得するその他の方法
@@IDENTITY
関数は、現在のセッションで最後に挿入された行の ID を返します。この関数は、SCOPE_IDENTITY()
関数と似ていますが、@@IDENTITY
関数はセッション全体で最後の挿入行 ID を返し、SCOPE_IDENTITY()
関数は現在のトランザクションで最後の挿入行 ID を返します。
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
SELECT @@IDENTITY;
OUTPUT INSERTED トリガーは、行が挿入されたときに実行されるトリガーです。このトリガーを使用して、挿入された行の ID を取得できます。
CREATE TRIGGER trigger_insert_Customers
ON Customers
FOR INSERT
AS
BEGIN
DECLARE @CustomerID INT;
SELECT @CustomerID = INSERTED.CustomerID;
PRINT @CustomerID;
END;
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
INSERT ステートメントの OUTPUT 句と INTO 句を組み合わせて、挿入された行の ID を変数に格納できます。
DECLARE @CustomerID INT;
INSERT INTO Customers (FirstName, LastName, OUTPUT INSERTED.CustomerID)
VALUES ('John', 'Doe');
SELECT @CustomerID;
- シンプルで効率的な方法が必要な場合は、SCOPE_IDENTITY() 関数を使用します。
- セッション全体で最後の挿入行 ID を取得する必要がある場合は、@@IDENTITY 関数を使用します。
- 挿入された行に対して追加の処理を実行する必要がある場合は、OUTPUT INSERTED トリガーを使用します。
- 挿入された行の ID を変数に格納する必要がある場合は、INSERT ステートメントの OUTPUT 句と INTO 句を組み合わせて使用します。
sql sql-server