Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Użyj NEWSEQUENTIALID(), aby utworzyć przyrostowy identyfikator GUID w SQL Server

W SQL Server możesz użyć NEWSEQUENTIALID() funkcja do tworzenia przyrostowych unikalnych wartości.

Tworzy identyfikator GUID (Globally Unique IDentifier), który jest większy niż jakikolwiek identyfikator GUID wygenerowany wcześniej przez tę funkcję na określonym komputerze od momentu uruchomienia systemu operacyjnego. Po ponownym uruchomieniu systemu operacyjnego identyfikator GUID może rozpocząć się ponownie z niższego zakresu, ale nadal jest globalnie unikalny.

NEWSEQUENTIALID() funkcja może być używana tylko z DEFAULT ograniczenia dotyczące kolumn tabeli typu unikalny identyfikator . Dlatego nie możesz po prostu uruchomić zapytania takiego jak SELECT NEWSEQUENTIALID() i spodziewaj się, że zadziała (ale możesz zrób to za pomocą NEWID() funkcja).

Przykład 1 – jako wartość domyślna

Oto krótki przykład pokazujący, jak to działa:

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;

Wynik:

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

Zauważ, że identyfikatory GUID zostały wygenerowane jako część DEFAULT ograniczenie na stole. Nie zostały wyraźnie podane w INSERT oświadczenie.

Przykład 2 – wyraźnie podany w instrukcji INSERT

Oto, co się stanie, jeśli spróbujesz użyć NEWSEQUENTIALID() w swoim INSERT oświadczenie:

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

Wynik:

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.

Musi więc być częścią DEFAULT ograniczenie (jak w poprzednim przykładzie).

Aby wstawić powyższe dane, wystarczy usunąć pierwszą kolumnę z INSERT operacja:

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

SELECT * FROM Prisoner;

Wynik:

+--------------------------------------+-----------------+
| 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          |
+--------------------------------------+-----------------+

Przykład 3 – używany w instrukcji SELECT

Otrzymasz ten sam błąd, jeśli spróbujesz użyć tej funkcji w podstawowym SELECT oświadczenie takie jak to:

SELECT NEWSEQUENTIALID();

Wynik:

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.

Bezpieczeństwo/Prywatność

Zaleca się, aby nie używać NEWSEQUENTIALID() w przypadku danych wrażliwych, ponieważ można odgadnąć wartość następnego wygenerowanego identyfikatora GUID, a tym samym uzyskać dostęp do danych powiązanych z tym identyfikatorem GUID.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Recenzja oprogramowania — naprawa gwiezdna dla MS SQL

  2. Sekwencja jako wartość domyślna dla kolumny

  3. 2 sposoby na zwrócenie listy połączonych serwerów w SQL Server przy użyciu T-SQL

  4. Jak utworzyć tabelę za pomocą GUI w SQL Server — SQL Server / T-SQL Tutorial, część 37

  5. Grupy dostępności AlwaysOn programu SQL Server:instalacja i konfiguracja. Część 2