Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Menggunakan Properti IDENTITY() di SQL Server

Saat Anda menggunakan T-SQL untuk membuat (atau mengubah) tabel di SQL Server, Anda memiliki opsi untuk menggunakan IDENTITY() properti untuk membuat kolom identitas.

Kolom identitas berisi nomor identifikasi yang bertambah secara otomatis. IDENTITY() properti dapat digunakan dengan CREATE TABLE dan ALTER TABLE pernyataan.

Sintaks

Sintaksnya seperti ini:

IDENTITY [ (seed , increment) ]

benih adalah nilai yang digunakan untuk baris pertama yang dimuat ke dalam tabel.

kenaikan adalah nilai tambahan yang ditambahkan ke nilai identitas baris sebelumnya yang dimuat.

Anda harus menentukan kedua argumen atau tidak keduanya. Jika Anda tidak menentukan keduanya, defaultnya adalah (1,1) .

Contoh 1 – Penggunaan Dasar

Berikut ini contoh untuk didemonstrasikan.

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

Kode ini membuat tabel dengan dua kolom. Kolom pertama (PetId ) adalah kolom identitas karena saya menggunakan IDENTITY() properti dalam definisinya.

Sekarang saya telah membuat kolom identitas, saya dapat memasukkan nama hewan peliharaan ke dalam PetName kolom tanpa perlu menyertakan ID untuk setiap baris.

INSERT INTO Pets (PetName)
VALUES ('Homer'), ('Felix'), ('Ruff');

SELECT * FROM Pet;

Hasil:

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

Contoh 2 – Benih dan Increment Berbeda

Berikut adalah contoh yang menggunakan seed dan increment yang berbeda.

Dalam hal ini, seed dimulai dari 150 dan bertambah 10 untuk setiap baris.

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

Sekarang masukkan beberapa data dan pilih:

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

SELECT * FROM Cities;

Hasil:

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

Contoh 3 – Penggunaan Salah

Seperti yang disebutkan, Anda harus menentukan kedua argumen atau tidak keduanya. Dengan kata lain, Anda tidak bisa memberikan satu argumen saja. Berikut adalah contoh yang terjadi jika Anda hanya memberikan satu argumen.

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

Hasil:

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

Contoh 4 – Mencoba Mengganti Nilai Identitas

Jika Anda mencoba mengganti nilai identitas otomatis, Anda mungkin mendapatkan kesalahan seperti ini.

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

Hasil:

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.

Ini karena Anda mencoba mengganti nilai yang dibuat oleh IDENTITY() Properti. Dalam banyak kasus, Anda mungkin tidak tahu bahwa itu adalah kolom identitas. Dalam kasus seperti itu, yang perlu Anda lakukan hanyalah menghapus kolom identitas dari INSERT . Anda pernyataan.

Namun, jika Anda benar-benar melakukannya perlu mengganti IDENTITY() properti, lihat Cara Menyisipkan Nilai ke dalam Kolom IDENTITAS di SQL Server.

Seperti yang disebutkan, jika Anda tidak perlu mengganti nilai identitas, Anda cukup menghapus kolom itu dari INSERT Anda penyataan.

Jadi saya bisa mengubah pernyataan sebelumnya menjadi ini:

INSERT INTO Cities (CityName)
VALUES ('Bangkok');

SELECT * FROM Cities;

Hasil:

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

Batasan Properti IDENTITY()

Properti identitas pada kolom menjamin hal berikut:

  • Setiap nilai baru dihasilkan berdasarkan seed &increment saat ini.
  • Setiap nilai baru untuk transaksi tertentu berbeda dari transaksi bersamaan lainnya di atas meja.

Ini tidak menjamin hal berikut:

  • Keunikan nilai
  • Nilai berurutan dalam suatu transaksi
  • Nilai berturut-turut setelah server dimulai ulang atau kegagalan lainnya
  • Penggunaan kembali nilai (misalnya, saat INSERT operasi gagal)

Untuk informasi selengkapnya tentang batasan ini, lihat dokumentasi Microsoft.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa cara terbaik untuk memotong tanggal di SQL Server?

  2. Cara Memperbaiki:JSON_VALUE Mengembalikan NULL dengan Long String (SQL Server)

  3. Buat Pemicu untuk mencatat SQL yang memengaruhi tabel?

  4. Bagaimana cara menyalin database SQL Azure ke server pengembangan lokal saya?

  5. Cara Memigrasi Pekerjaan SQL Server Dari Satu Instance SQL Server Ke Yang Lain