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

SQL ServerでIDENTITY()プロパティを使用する方法

    T-SQLを使用してSQLServerでテーブルを作成(または変更)する場合、IDENTITY()を使用するオプションがあります。 ID列を作成するためのプロパティ。

    ID列には、自動的に増加するID番号が含まれています。 IDENTITY() プロパティはCREATE TABLEで使用できます およびALTER TABLE ステートメント。

    構文

    構文は次のようになります:

    IDENTITY [ (seed , increment) ]
    

    シード テーブルにロードされる最初の行に使用される値です。

    増分 ロードされた前の行のID値に追加される増分値です。

    両方の引数を指定するか、どちらも指定しない必要があります。どちらも指定しない場合、デフォルトは(1,1)です。 。

    例1-基本的な使用法

    実例を示します。

    CREATE TABLE Pets (
        PetId int IDENTITY(1,1) PRIMARY KEY, 
        PetName varchar(255)
        );
    

    このコードは、2つの列を持つテーブルを作成します。最初の列(PetId )は、IDENTITY()を使用しているため、ID列です。 その定義のプロパティ。

    ID列を作成したので、ペットの名前をPetNameに挿入できます。 各行のIDを含める必要のない列。

    INSERT INTO Pets (PetName)
    VALUES ('Homer'), ('Felix'), ('Ruff');
    
    SELECT * FROM Pet;
    

    結果:

    +---------+-----------+
    | PetId   | PetName   |
    |---------+-----------|
    | 1       | Homer     |
    | 2       | Felix     |
    | 3       | Ruff      |
    +---------+-----------+
    

    例2–異なるシードと増分

    これは、異なるシードと増分を使用する例です。

    この場合、シードは150から始まり、行ごとに10ずつ増加します。

    CREATE TABLE Cities (
        CityId int IDENTITY(150, 10) PRIMARY KEY, 
        CityName varchar(255)
        );
    

    次に、いくつかのデータを挿入して選択します:

    INSERT INTO Cities (CityName)
    VALUES ('Auckland'), ('Danang'), ('Khon Kaen');
    
    SELECT * FROM Cities;
    

    結果:

    +----------+------------+
    | CityId   | CityName   |
    |----------+------------|
    | 150      | Auckland   |
    | 160      | Danang     |
    | 170      | Khon Kaen  |
    +----------+------------+
    

    例3–誤った使用法

    前述のように、両方の引数を指定するか、どちらも指定しない必要があります。つまり、1つの引数だけを提供することはできません。引数を1つだけ指定するとどうなるかの例を次に示します。

    CREATE TABLE Cities (
        CityId int IDENTITY(1) PRIMARY KEY, 
        CityName varchar(255)
        );
    

    結果:

    Msg 102, Level 15, State 1, Line 2
    Incorrect syntax near ')'.
    

    例4–ID値を上書きしようとしています

    自動ID値を上書きしようとすると、次のようなエラーが発生する可能性があります。

    INSERT INTO Cities (CityId, CityName)
    VALUES (123, 'Bangkok');
    

    結果:

    Msg 544, Level 16, State 1, Line 1
    Cannot insert explicit value for identity column in table 'Cities' when IDENTITY_INSERT is set to OFF.
    

    これは、IDENTITY()によって作成された値を上書きしようとしているためです。 財産。多くの場合、それがID列であることを知らなかった可能性があります。このような場合、必要なのはINSERTからID列を削除することだけです。 ステートメント。

    ただし、本当に IDENTITY()をオーバーライドする必要があります プロパティについては、SQLServerのIDENTITY列に値を挿入する方法を参照してください。

    前述のように、ID値を上書きする必要がない場合は、その列をINSERTから削除するだけです。 声明。

    したがって、前のステートメントを次のように変更できます:

    INSERT INTO Cities (CityName)
    VALUES ('Bangkok');
    
    SELECT * FROM Cities;
    

    結果:

    +----------+------------+
    | CityId   | CityName   |
    |----------+------------|
    | 150      | Auckland   |
    | 160      | Danang     |
    | 170      | Khon Kaen  |
    | 180      | Bangkok    |
    +----------+------------+
    

    IDENTITY()プロパティの制限

    列のIDプロパティは、次のことを保証します。

    • 新しい値はそれぞれ、現在のシードと増分に基づいて生成されます。
    • 特定のトランザクションの新しい値はそれぞれ、テーブル上の他の同時トランザクションとは異なります。

    次のことを保証するものではありません:

    • 値の一意性
    • トランザクション内の連続する値
    • サーバーの再起動またはその他の障害後の連続した値
    • 値の再利用(たとえば、INSERTの場合 操作は失敗します)

    これらの制限の詳細については、Microsoftのドキュメントを参照してください。


    1. PostgreSQL用のジョブスケジューリングツールの概要

    2. データベース設計のステップは何ですか?

    3. Windowsxamppでlower_case_table_names=2の値を変更する場所

    4. SQLServer2000-リンクサーバー