IDENTITY、OUTPUT 句、トリガー:状況に最適な方法で SQL Server 2008 の主キーを取得
SQL Server 2008 で新しく挿入された行の主キーを取得する方法
IDENTITY 列を使用する
IDENTITY 列は、新しい行が挿入されるたびに自動的にインクリメントされる列です。 新しい行の主キーを取得するには、SCOPE_IDENTITY()
関数を使用できます。
INSERT INTO your_table (column1, column2, ...)
VALUES (value1, value2, ...);
SELECT SCOPE_IDENTITY();
この方法は、新しく挿入された行の主キーを簡単に取得できるシンプルな方法です。 ただし、IDENTITY 列が常に主キーであるとは限らないことに注意する必要があります。
OUTPUT 句を使用する
OUTPUT 句を使用すると、INSERT ステートメントを実行した後に新しい行のデータを取得できます。 主キーを含む新しい行のデータを取得するには、次のようにします。
INSERT INTO your_table (column1, column2, ...)
OUTPUT INSERTED.column_name, ...
VALUES (value1, value2, ...);
この方法は、新しく挿入された行の複数の列を取得する場合に便利です。
トリガーを使用する
トリガーは、データベース内のイベント (INSERT、UPDATE、DELETE など) に応じて実行されるコードの塊です。 新しい行が挿入されたときにトリガーを起動し、その行の主キーを取得することができます。
CREATE TRIGGER your_trigger
ON your_table
FOR INSERT
AS
BEGIN
DECLARE @primaryKey INT;
SELECT @primaryKey = SCOPE_IDENTITY();
-- 新しい行の主キーを使用して何か処理を行う
END;
この方法は、新しい行の挿入に関連する追加の処理を実行する必要がある場合に便利です。
どの方法を使用するかは、状況によって異なります。 簡単な方法が必要な場合は、IDENTITY 列を使用するのが良いでしょう。 複数の列を取得する必要がある場合は、OUTPUT 句を使用する必要があります。 新しい行の挿入に関連する追加の処理を実行する必要がある場合は、トリガーを使用する必要があります。
- SQL Server 2008 より古いバージョンの SQL Server を使用している場合は、これらの方法が使用できない場合があります。
- 主キーが複合列の場合は、複数の列の値を取得する必要があります。
- 上記の例では、
your_table
とcolumn_name
を実際のテーブル名と列名に置き換える必要があります。
CREATE TABLE your_table (
id INT IDENTITY(1, 1) PRIMARY KEY,
column1 VARCHAR(50),
column2 INT
);
INSERT INTO your_table (column1, column2)
VALUES ('Data1', 100);
SELECT SCOPE_IDENTITY();
このコードは、your_table
という名前のテーブルを作成し、id
という名前の IDENTITY 列を追加します。 次に、Data1
と 100 の値を column1
と column2
列に挿入します。 最後に、SCOPE_IDENTITY()
関数を使用して、新しく挿入された行の主キーを取得します。 この例では、主キーの値は 1 になります。
CREATE TABLE your_table (
id INT IDENTITY(1, 1) PRIMARY KEY,
column1 VARCHAR(50),
column2 INT
);
INSERT INTO your_table (column1, column2)
OUTPUT INSERTED.id, INSERTED.column1
VALUES ('Data1', 100);
1
Data1
CREATE TABLE your_table (
id INT IDENTITY(1, 1) PRIMARY KEY,
column1 VARCHAR(50),
column2 INT
);
CREATE TRIGGER your_trigger
ON your_table
FOR INSERT
AS
BEGIN
DECLARE @primaryKey INT;
SELECT @primaryKey = SCOPE_IDENTITY();
-- 新しい行の主キーを使用して何か処理を行う
PRINT '新しい行の主キー: ' + @primaryKey;
END;
INSERT INTO your_table (column1, column2)
VALUES ('Data1', 100);
このコードは、your_table
という名前のテーブルを作成し、id
という名前の IDENTITY 列を追加します。 次に、your_trigger
という名前のトリガーを作成します。 このトリガーは、新しい行が your_table
テーブルに挿入されるときに起動されます。 トリガーは、SCOPE_IDENTITY()
関数を使用して、新しく挿入された行の主キーを取得します。 最後に、主キーの値をコンソールに印刷します。 この例では、コンソール出力は以下のようになります。
新しい行の主キー: 1
INSERT INTO your_table (column1, column2, ...)
VALUES (value1, value2, ...);
DECLARE @primaryKey INT;
SET @primaryKey = @@IDENTITY;
-- 新しい行の主キーを使用して何か処理を行う
この方法は、OUTPUT
句を使用する場合と似ていますが、@@IDENTITY
システム変数を使用して新しく挿入された行の主キーを取得します。
INSERT ステートメントと IDENT_CURRENT('your_table') 関数を使用する
INSERT INTO your_table (column1, column2, ...)
VALUES (value1, value2, ...);
DECLARE @primaryKey INT;
SET @primaryKey = IDENT_CURRENT('your_table');
-- 新しい行の主キーを使用して何か処理を行う
この方法は、IDENT_CURRENT()
関数を使用して新しく挿入された行の主キーを取得します。 この関数は、指定されたテーブルの最​​近挿入された IDENTITY 列の値を返します。
INSERT INTO your_table (column1, column2, ...)
VALUES (value1, value2, ...);
DECLARE @rowCount INT;
SELECT @rowCount = ROWCOUNT();
IF @rowCount = 1
BEGIN
DECLARE @primaryKey INT;
SELECT @primaryKey = SCOPE_IDENTITY();
-- 新しい行の主キーを使用して何か処理を行う
END;
この方法は、ROWCOUNT()
関数を使用して、INSERT
ステートメントによって挿入された行数を取得します。 挿入された行が 1 行のみの場合、SCOPE_IDENTITY()
関数を使用して主キーを取得します。
sql-server database