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.