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

Gunakan NEWSEQUENTIALID() untuk Membuat GUID yang Bertambah di SQL Server

Di SQL Server, Anda dapat menggunakan NEWSEQUENTIALID() berfungsi untuk membuat nilai unik tambahan.

Ini menciptakan GUID (Pengidentifikasi Unik Global) yang lebih besar daripada GUID apa pun yang dihasilkan sebelumnya oleh fungsi ini di komputer tertentu sejak sistem operasi dimulai. Setelah memulai ulang sistem operasi, GUID dapat memulai lagi dari rentang yang lebih rendah, tetapi masih unik secara global.

NEWSEQUENTIALID() fungsi hanya dapat digunakan dengan DEFAULT batasan pada kolom tabel dengan tipe pengidentifikasi unik . Oleh karena itu, Anda tidak bisa hanya menjalankan kueri seperti SELECT NEWSEQUENTIALID() dan berharap itu berhasil (tetapi Anda bisa lakukan itu dengan NEWID() fungsi).

Contoh 1 – Sebagai Nilai DEFAULT

Berikut adalah contoh cepat untuk mendemonstrasikan cara kerjanya:

USE Test;
CREATE TABLE Prisoner 
(
    PrisonerId uniqueidentifier NOT NULL DEFAULT NEWSEQUENTIALID(),
    PrisonerName varchar(70) NOT NULL,
);

INSERT Prisoner (PrisonerName)
VALUES
    ('Jerry Seinfeld'),
    ('George Costanza'),
    ('Elaine Benes');

SELECT * FROM Prisoner;

Hasil:

+--------------------------------------+-----------------+
| PrisonerId                           | PrisonerName    |
|--------------------------------------+-----------------|
| a46d433e-f36b-1410-8a80-007d2b533547 | Jerry Seinfeld  |
| aa6d433e-f36b-1410-8a80-007d2b533547 | George Costanza |
| b06d433e-f36b-1410-8a80-007d2b533547 | Elaine Benes    |
+--------------------------------------+-----------------+

Perhatikan bahwa GUID dibuat sebagai bagian dari DEFAULT kendala di atas meja. Mereka tidak secara eksplisit disediakan di INSERT pernyataan.

Contoh 2 – Diberikan Secara Eksplisit dalam Pernyataan INSERT

Inilah yang terjadi jika Anda mencoba menggunakan NEWSEQUENTIALID() di INSERT . Anda pernyataan:

INSERT Prisoner (PrisonerId, PrisonerName)
VALUES (NEWSEQUENTIALID(), 'Kramer');

Hasil:

Msg 302, Level 16, State 0, Line 1
The newsequentialid() built-in function can only be used in a DEFAULT expression for a column of type 'uniqueidentifier' in a CREATE TABLE or ALTER TABLE statement. It cannot be combined with other operators to form a complex scalar expression.

Jadi itu harus menjadi bagian dari DEFAULT kendala (seperti pada contoh sebelumnya).

Untuk memasukkan data di atas, yang perlu kita lakukan adalah menghapus kolom pertama dari INSERT operasi:

INSERT Prisoner (PrisonerName)
VALUES ('Kramer');

SELECT * FROM Prisoner;

Hasil:

+--------------------------------------+-----------------+
| PrisonerId                           | PrisonerName    |
|--------------------------------------+-----------------|
| a46d433e-f36b-1410-8a80-007d2b533547 | Jerry Seinfeld  |
| aa6d433e-f36b-1410-8a80-007d2b533547 | George Costanza |
| b06d433e-f36b-1410-8a80-007d2b533547 | Elaine Benes    |
| b76d433e-f36b-1410-8a80-007d2b533547 | Kramer          |
+--------------------------------------+-----------------+

Contoh 3 – Digunakan dalam Pernyataan SELECT

Anda akan mendapatkan kesalahan yang sama jika Anda mencoba menggunakan fungsi ini dalam SELECT dasar pernyataan seperti ini:

SELECT NEWSEQUENTIALID();

Hasil:

Msg 302, Level 16, State 0, Line 1
The newsequentialid() built-in function can only be used in a DEFAULT expression for a column of type 'uniqueidentifier' in a CREATE TABLE or ALTER TABLE statement. It cannot be combined with other operators to form a complex scalar expression.

Keamanan/Privasi

Disarankan untuk tidak menggunakan NEWSEQUENTIALID() untuk data sensitif, karena memungkinkan untuk menebak nilai GUID yang dihasilkan berikutnya dan oleh karena itu, mengakses data yang terkait dengan GUID tersebut.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menggunakan Operator ANTARA di SQL Server

  2. Temukan tanggal terdekat di SQL Server

  3. Buat Fungsi Bernilai Tabel Multi-Pernyataan (MSTVF) di SQL Server

  4. Pemindaian Mundur Indeks SQL Server:Memahami, Menyetel

  5. Bagaimana batasan kunci asing dapat dinonaktifkan sementara menggunakan T-SQL?