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

SQL Server :czy NEWID() zawsze daje unikalny identyfikator?

Oba NEWID() i NEWSEQUENTIALID() podaj globalnie unikalne wartości typu uniqueidentifier .

NEWID() obejmuje losową aktywność, dlatego następna wartość jest nieprzewidywalna i wolniej się ją wykonuje.

NEWSEQUENTIALID() nie obejmuje losowej aktywności, dlatego można przewidzieć następną wygenerowaną wartość (niełatwo!) i wykonuje się szybciej niż NEWID() .

Tak więc, jeśli nie martwisz się przewidywaną następną wartością (ze względów bezpieczeństwa), możesz użyć NEWSEQUENTIALID() . Jeśli martwisz się przewidywalnością lub nie masz nic przeciwko niewielkim spadkom wydajności, możesz użyć NEWID() .

Jednak w ścisłym tego słowa znaczeniu nadal istnieją znikome szanse, że identyfikatory GUID generowane przez różne komputery mają tę samą wartość. W praktyce uważa się to za niemożliwe.

Jeśli chcesz uzyskać więcej informacji, przeczytaj to:Która metoda generowania identyfikatorów GUID jest najlepsza, aby zapewnić, że identyfikator GUID jest naprawdę unikalny?

Uwaga NEWID() jest zgodny z RFC 4122 . Druga funkcja wykorzystuje algorytm Microsoftu do generowania wartości.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zwrócić bieżącą wartość rowversion dla bazy danych programu SQL Server (przykład T-SQL)

  2. Index znajdował się poza granicami Array. (Microsoft.SqlServer.smo)

  3. Wstawianie zbiorcze programu SQL Server — część 2

  4. Zwróć listę obliczonych kolumn w SQL Server

  5. Jak korzystać z szablonów w SQL Server Management Studio (SSMS) — samouczek SQL Server / TSQL część 16