Freigeben über


NEWSEQUENTIALID (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

Erstellt einen GUID, der größer ist als alle GUIDs, die seit dem Start von Windows bisher von dieser Funktion auf einem angegebenen Computer generiert wurden. Nach dem Neustart von Windows kann die GUID erneut aus einem niedrigeren Bereich gestartet werden, ist aber weiterhin global eindeutig. Wenn eine GUID-Spalte als Zeilenbezeichner verwendet wird, kann die Verwendung NEWSEQUENTIALID schneller sein als die Verwendung der NEWID Funktion. Dies liegt daran, dass die NEWID Funktion zufällige Aktivitäten verursacht und weniger zwischengespeicherte Datenseiten verwendet. Die Verwendung NEWSEQUENTIALID hilft auch, die Daten- und Indexseiten vollständig auszufüllen.

Wichtig

Wenn der Datenschutz ein Problem darstellt, verwenden Sie diese Funktion nicht. Es ist möglich, den Wert der nächsten generierten GUID zu erraten und daher auf Daten zuzugreifen, die dieser GUID zugeordnet sind.

NEWSEQUENTIALID ist ein Wrapper über die Windows UuidCreateSequential-Funktion , wobei einige Byte-Shuffling angewendet wurden.

Warnung

Die UuidCreateSequential Funktion verfügt über Hardwareabhängigkeiten. Auf SQL Server können Cluster von sequenziellen Werten entstehen, wenn Datenbanken (z.B. eigenständige Datenbanken) auf andere Computer verschoben werden. In der Azure SQL-Datenbank und wenn Sie Always On verwenden, können Cluster sequenzieller Werte entwickeln, wenn die Datenbank nicht auf einen anderen Computer übertragen wird.

Transact-SQL-Syntaxkonventionen

Syntax

NEWSEQUENTIALID ( )

Rückgabetypen

uniqueidentifier

Bemerkungen

NEWSEQUENTIALID kann nur mit DEFAULT Einschränkungen für Tabellenspalten vom Typ uniqueidentifier verwendet werden. Beispiel:

CREATE TABLE myTable
(
    ColumnA UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID()
);

Wenn NEWSEQUENTIALID sie in DEFAULT Ausdrücken verwendet wird, kann sie nicht mit anderen skalaren Operatoren kombiniert werden. Beispielsweise können Sie den folgenden Code nicht ausführen:

CREATE TABLE myTable
(
    ColumnA UNIQUEIDENTIFIER DEFAULT dbo.myfunction(NEWSEQUENTIALID())
);

Im vorherigen Beispiel ist myfunction() eine benutzerdefinierte Skalarfunktion, die einen uniqueidentifier-Wert annimmt und zurückgibt.

NEWSEQUENTIALID in Abfragen kann nicht darauf verwiesen werden.

Sie können zum Generieren von GUIDs verwenden NEWSEQUENTIALID , um Seitenteilungen und zufällige E/A auf Blattebene von Indizes zu reduzieren.

Jede mithilfe dieser NEWSEQUENTIALID GuiD generierte GUID ist auf diesem Computer eindeutig. GuiDs, die mit der Verwendung NEWSEQUENTIALID generiert werden, sind nur dann auf mehreren Computern eindeutig, wenn der Quellcomputer über eine Netzwerkkarte verfügt.