sql >> データベース >  >> RDS >> Sqlserver

IDENT_CURRENT()を使用して、SQLServerのID列の現在のID値を返します

    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つの機能の違いを説明する簡単な例を示します。


    1. MySQLでコンバージョン率を計算する方法は?

    2. MySQL length()とchar_length()

    3. オラクルはコミットされていない読み取りオプションを許可していますか?

    4. 事前入力されたデータベースの更新