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

SQLServerのIDENTITY列に値を挿入する方法

    SQL ServerのID列に値を挿入しようとしたことがある場合は、次のようなエラーが発生した可能性があります。

    IDENTITY_INSERTがOFFに設定されている場合、テーブル「Artists」のID列に明示的な値を挿入できません。

    これは正常です。 ID列があるのには理由があります。挿入された各行の増分値が列に自動的に入力されます。したがって、その列に値を挿入する必要はありません。

    ただし、することもあります ID列に値を挿入する必要があります。たとえば、独自のID値を保持する必要のあるデータをデータベースに入力することができます。この場合、IDENTITYを上書きする必要があります 財産。方法は次のとおりです。

    IDENTITY_INSERTを有効にする

    IDENTITYを上書きできます IDENTITY_INSERTを有効にしてプロパティ 。これにより、独自の値をID列に挿入できます。

    次に例を示します:

    SET IDENTITY_INSERT Artists ON;
    INSERT INTO Artists (ArtistId, ArtistName, ActiveFrom)   
    VALUES 
      (1001, 'AC/DC','1973-01-11'), 
      (1002, 'Allan Holdsworth','1969-01-01'),
      (1003, 'Buddy Rich','1919-01-01');
    SET IDENTITY_INSERT Artists OFF;
    

    この例では、ArtistsテーブルにID列があります(この場合、ArtistIdはID列です)。 IDENTITYを上書きするには INSERTの前にあるプロパティ SET IDENTITY_INSERT Artists ONを含むステートメント 。このT-SQLステートメントを使用すると、「このテーブルにID列があることはわかっていますが、この場合は myを挿入します。 代わりに値」。

    IDENTITY_INSERTに注意してください 一度に有効にできるのは1つのテーブルのみです。したがって、IDENTITY_INSERTを無効にすることをお勧めします 挿入直後。これにより、元の状態に戻り、必要に応じて別のテーブルのID列を上書きできます。

    また、IDENTITY_INSERTを有効にするため ユーザーはテーブルを所有しているか、ALTERを持っている必要があります テーブルの許可。

    テーブル間のコピー

    IDENTITY_INSERTを有効にする テーブル間でデータをコピーする場合にも役立ちます。たとえば、あるテーブルから別のテーブルにデータを入力することができます。

    ArtistsテーブルからArtists_Archiveテーブルにデータをコピーする例を次に示します。

    SET IDENTITY_INSERT Artists_Archive ON;
    INSERT INTO Artists_Archive (ArtistId, ArtistName, ActiveFrom)
      SELECT ArtistId, ArtistName, ActiveFrom
    	FROM Artists;
    SET IDENTITY_INSERT Artists_Archive OFF;
    

    注意すべき点の1つは、ID列に主キー制約がある場合、宛先テーブルにすでに存在するすべての値を拒否することです。したがって、ID列をオーバーライドすることが間違いなくやりたいことであることを絶対に確認する必要があります。


    1. データベースファイルをファイルエクスプローラーの/assetsから/data/dataフォルダーにコピーする-Android

    2. Access2016のデザインビューで単純な選択クエリを作成する方法

    3. MySQLで先頭と末尾の文字を削除する方法

    4. MariaDBのすべての関数を一覧表示する2つの方法