SQL Serverでは、T-SQL IDENT_CURRENT()
を使用できます。 指定されたテーブルまたはID列のビューに対して生成された最後のID値を返す関数。生成される最後のID値は、任意のセッションおよび任意のスコープのものです。
構文
構文は次のようになります:
IDENT_CURRENT( 'table_or_view' )
table_or_view 引数は、ID値が返されるテーブルまたはビューの名前です。
例1-基本的な使用法
これが基本的なコード例です。
SELECT IDENT_CURRENT('Pets') AS Result;
結果:
+----------+ | Result | |----------| | 3 | +----------+
この場合、現在のID値は3です。
より多くのテーブルをチェックする別のクエリがあります。
SELECT IDENT_CURRENT('Pets') AS Pets, IDENT_CURRENT('BestFriends') AS BestFriends, IDENT_CURRENT('Cities') AS Cities;
結果:
+--------+---------------+----------+ | Pets | BestFriends | Cities | |--------+---------------+----------| | 3 | 121 | 180 | +--------+---------------+----------+
例2–スキーマを含める
引数にスキーマを含めることもできます。
SELECT IDENT_CURRENT('dbo.Pets') AS Result;
結果:
+----------+ | Result | |----------| | 3 | +----------+
例3–挿入後
この例では、さらに2つの行をペットに挿入します。 テーブルを選択し、IDENT_CURRENT()
を選択します もう一度。
INSERT INTO Pets (PetName) VALUES ('Brian'), ('Alf'); SELECT IDENT_CURRENT('dbo.Pets') AS Result;
結果:
+----------+ | Result | |----------| | 5 | +----------+
表は次のようになります。
SELECT * FROM Pets;
結果:
+---------+-----------+ | PetId | PetName | |---------+-----------| | 1 | Homer | | 2 | Felix | | 3 | Ruff | | 4 | Brian | | 5 | Alf | +---------+-----------+
PetId columnはID列です。シード値は1で、増分値も1です。
このテーブルの作成に使用されるコードについては、SQL ServerでIDENTITY()プロパティを使用する方法を参照してください。
例4–データベース内のすべてのテーブルを確認する
これは、データベース内のすべてのテーブルでIDシード値を確認する例です。
SELECT TABLE_SCHEMA, TABLE_NAME, IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) AS IDENT_CURRENT FROM INFORMATION_SCHEMA.TABLES WHERE IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) IS NOT NULL;
結果:
+----------------+----------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | IDENT_CURRENT | |----------------+----------------+-----------------| | dbo | ConstraintTest | 17 | | dbo | Event | 1 | | dbo | Scoreboard | 8 | | dbo | Pets | 5 | | dbo | BestFriends | 121 | | dbo | Cities | 180 | | dbo | Colors | 6 | | dbo | t6 | 1 | | dbo | t7 | 100 | +----------------+----------------+-----------------+
戻り値について
IDENT_CURRENT()
の戻り値 はnumeric(@@MAXPRECISION,0))
。これは、固定の精度とスケールを持つ数値データ型であることを意味します。
精度はサーバーによって異なります。 @@MAXPRECISION
引数は、サーバーで現在設定されている10進数および数値のデータ型で使用されるレベルを返します。精度は、小数点以下の最大合計桁数を指定します(小数点の左側と右側の桁を含みます)。
2番目の引数は、0
のスケールを指定します 、これは小数点以下の桁がないことを意味します。
次のクエリを実行して、サーバーに現在設定されている精度レベルを見つけることができます。
SELECT @@MAX_PRECISION AS [Max Precision];
これが私のシステムの結果です:
+-----------------+ | Max Precision | |-----------------| | 38 | +-----------------+
ID列の作成
IDENTITY()
を使用してID列を作成できます CREATE TABLE
のプロパティ またはALTER TABLE
声明。
ID列を作成するもう1つの方法は、IDENTITY()
です。 働き。これにより、SELECT INTO
を使用するときにID列を作成できます。 あるソースから別のソースにデータを転送するステートメント。
@@ IDENTITYとSCOPE_IDENTITY()の違い
IDENT_CURRENT()
関数は@@IDENTITY
に似ています およびSCOPE_IDENTITY()
、ただし、いくつかの違いがあります。
@@IDENTITY
およびSCOPE_IDENTITY()
anyで生成された最後のID値を返します 現在のセッションのテーブル。ただし、これら2つの関数の違いは、SCOPE_IDENTITY
@@IDENTITY
に対して、現在のスコープ内でのみ値を返します 特定の範囲に限定されません。
IDENT_CURRENT()
一方、スコープによって制限されることはありませんまたは セッション。むしろ、指定されたテーブルに制限されます 。任意のセッションおよび任意のスコープで特定のテーブルに対して生成されたID値を返します。
SQLServerのIDENT_CURRENTと@@IDENTITYとSCOPE_IDENTITYの違いを参照してください:違いは何ですか?これらの3つの機能の違いを説明する簡単な例を示します。