SCOPE_IDENTITY() 関数で自動生成される行 ID を取得する
SQL Server で自動生成される行 ID を使用した SELECT ステートメント
SQL Server では、IDENTITY プロパティを使用して、テーブル行に自動的に一意の ID を生成できます。この ID は、行を識別したり、新しい行を挿入したりする際に役立ちます。
SELECT ステートメント
以下の SELECT ステートメントは、Customers
テーブルからすべての行を取得し、自動生成された行 ID (CustomerID
) を含めます。
SELECT *
FROM Customers;
IDENTITY プロパティは、テーブルの列に設定できます。このプロパティを設定すると、その列に挿入される値は自動的に生成されます。
CREATE TABLE Customers (
CustomerID INT IDENTITY(1,1),
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
上記の例では、CustomerID
列は IDENTITY プロパティで定義されています。このプロパティにより、CustomerID
列に挿入される値は自動的に 1 から始まり、1 ずつ増加します。
SCOPE_IDENTITY() 関数は、最後に挿入された行の自動生成された ID を取得するために使用できます。
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
DECLARE @CustomerID INT;
SET @CustomerID = SCOPE_IDENTITY();
SELECT @CustomerID;
上記の例では、Customers
テーブルに新しい行が挿入されます。その後、SCOPE_IDENTITY() 関数を使用して、挿入された行の CustomerID
値を取得します。
OUTPUT 句を使用して、INSERT ステートメントによって挿入された行の自動生成された ID を取得することもできます。
INSERT INTO Customers (FirstName, LastName)
OUTPUT INSERTED.CustomerID
VALUES ('John', 'Doe');
SQL Server で自動生成される行 ID は、行を識別したり、新しい行を挿入したりする際に役立ちます。SELECT ステートメント、SCOPE_IDENTITY() 関数、OUTPUT 句を使用して、自動生成された ID を取得することができます。
コード
-- テーブル作成
CREATE TABLE Customers (
CustomerID INT IDENTITY(1,1),
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
-- 行挿入
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
-- SCOPE_IDENTITY() 関数を使用して ID 取得
DECLARE @CustomerID INT;
SET @CustomerID = SCOPE_IDENTITY();
SELECT @CustomerID;
-- OUTPUT 句を使用して ID 取得
INSERT INTO Customers (FirstName, LastName)
OUTPUT INSERTED.CustomerID
VALUES ('Jane', 'Doe');
-- 結果確認
SELECT *
FROM Customers;
出力
1
2
CustomerID | FirstName | LastName
------- | -------- | --------
1 | John | Doe
2 | Jane | Doe
解説
- 最初に
Customers
テーブルを作成します。このテーブルには、CustomerID
という自動生成される行 ID 列と、FirstName
とLastName
という 2 つの列があります。 - 次に、
Customers
テーブルに 2 つの行を挿入します。 SCOPE_IDENTITY()
関数を使用して、最後に挿入された行のCustomerID
値を取得します。
実行方法
- SQL Server Management Studio (SSMS) を起動します。
- 新しいクエリウィンドウを開きます。
- 上記のコードをクエリウィンドウに貼り付けます。
- [実行] ボタンをクリックします。
SQL Server で自動生成される行 ID を取得する他の方法
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
SELECT @@IDENTITY;
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
SELECT IDENT_CURRENT('Customers');
INSERTED テーブルは、INSERT ステートメントによって挿入された行の情報を格納する仮想テーブルです。
INSERT INTO Customers (FirstName, LastName)
OUTPUT INSERTED.CustomerID
VALUES ('John', 'Doe');
SELECT *
FROM INSERTED;
トリガーを使用して、新しい行が挿入されたときに自動的に行 ID を取得することができます。
CREATE TRIGGER GetCustomerID
ON Customers
AFTER INSERT
AS
BEGIN
SELECT @@IDENTITY;
END;
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
SQL Server で自動生成される行 ID を取得するには、さまざまな方法があります。上記の方法は、それぞれ異なる利点と欠点があります。ニーズに合った方法を選択する必要があります。
sql-server