Delen via


GUID- en uniqueidentifier-waarden vergelijken

Het GUID-gegevenstype (Globally Unique Identifier) in SQL Server wordt vertegenwoordigd door het uniqueidentifier gegevenstype, waarin een binaire waarde van 16 bytes wordt opgeslagen. Een GUID is een binair getal en het belangrijkste gebruik ervan is een id die uniek moet zijn in een netwerk met veel computers op veel sites. GUID's kunnen worden gegenereerd door de Transact-SQL NEWID-functie aan te roepen en is gegarandeerd uniek over de hele wereld. Zie uniqueidentifier (Transact-SQL) voor meer informatie.

Werken met SqlGuid-waarden

Omdat GUID's waarden lang en verborgen zijn, zijn ze niet zinvol voor gebruikers. Als willekeurig gegenereerde GUID's worden gebruikt voor sleutelwaarden en u veel rijen invoegt, krijgt u willekeurige I/O in uw indexen, wat de prestaties negatief kan beïnvloeden. GUID's zijn ook relatief groot in vergelijking met andere gegevenstypen. Over het algemeen raden we u aan alleen GUID's te gebruiken voor zeer smalle scenario's waarvoor geen ander gegevenstype geschikt is.

GUID-waarden vergelijken

Vergelijkingsoperatoren kunnen worden gebruikt met uniqueidentifier waarden. Volgorde wordt echter niet geïmplementeerd door de bitpatronen van de twee waarden te vergelijken. De enige bewerkingen die zijn toegestaan op basis van een uniqueidentifier waarde zijn vergelijkingen (=, <>, , <, ><=>) en het controleren op NULL (IS NULL en IS NOT NULL). Er zijn geen andere rekenkundige operatoren toegestaan.

Beide Guid en SqlGuid hebben een CompareTo methode voor het vergelijken van verschillende GUID-waarden. System.Guid.CompareTo En SqlTypes.SqlGuid.CompareTo worden echter anders geïmplementeerd. SqlGuidCompareTo implementeert met behulp van SQL Server-gedrag, in de laatste zes bytes van een waarde zijn het belangrijkst. Guid evalueert alle 16 bytes. In het volgende voorbeeld ziet u dit gedragsverschil. In de eerste sectie met code worden niet-gesorteerde Guid waarden weergegeven en in de tweede codesectie worden de gesorteerde Guid waarden weergegeven. In de derde sectie ziet u de gesorteerde SqlGuid waarden. De uitvoer wordt weergegeven onder de codevermelding.

static void WorkWithGuids()
{
    // Create an ArrayList and fill it with Guid values.
    ArrayList guidList = new()
    {
        new Guid("3AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE"),
        new Guid("2AAAAAAA-BBBB-CCCC-DDDD-1EEEEEEEEEEE"),
        new Guid("1AAAAAAA-BBBB-CCCC-DDDD-3EEEEEEEEEEE")
    };

    // Display the unsorted Guid values.
    Console.WriteLine("Unsorted Guids:");
    foreach (Guid guidValue in guidList)
    {
        Console.WriteLine(" {0}", guidValue);
    }
    Console.WriteLine("");

    // Sort the Guids.
    guidList.Sort();

    // Display the sorted Guid values.
    Console.WriteLine("Sorted Guids:");
    foreach (Guid guidSorted in guidList)
    {
        Console.WriteLine(" {0}", guidSorted);
    }
    Console.WriteLine("");

    // Create an ArrayList of SqlGuids.
    ArrayList sqlGuidList = new()
    {
        new SqlGuid("3AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE"),
        new SqlGuid("2AAAAAAA-BBBB-CCCC-DDDD-1EEEEEEEEEEE"),
        new SqlGuid("1AAAAAAA-BBBB-CCCC-DDDD-3EEEEEEEEEEE")
    };

    // Sort the SqlGuids. The unsorted SqlGuids are in the same order
    // as the unsorted Guid values.
    sqlGuidList.Sort();

    // Display the sorted SqlGuids. The sorted SqlGuid values are ordered
    // differently than the Guid values.
    Console.WriteLine("Sorted SqlGuids:");
    foreach (SqlGuid sqlGuidValue in sqlGuidList)
    {
        Console.WriteLine(" {0}", sqlGuidValue);
    }
}
Private Sub WorkWithGuids()

    ' Create an ArrayList and fill it with Guid values.
    Dim guidList As New ArrayList()
    guidList.Add(New Guid("3AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE"))
    guidList.Add(New Guid("2AAAAAAA-BBBB-CCCC-DDDD-1EEEEEEEEEEE"))
    guidList.Add(New Guid("1AAAAAAA-BBBB-CCCC-DDDD-3EEEEEEEEEEE"))

    ' Display the unsorted Guid values.
    Console.WriteLine("Unsorted Guids:")
    For Each guidValue As Guid In guidList
        Console.WriteLine("{0}", guidValue)
    Next
    Console.WriteLine()

    ' Sort the Guids.
    guidList.Sort()

    ' Display the sorted Guid values.

    Console.WriteLine("Sorted Guids:")
    For Each guidSorted As Guid In guidList
        Console.WriteLine("{0}", guidSorted)
    Next
    Console.WriteLine()

    ' Create an ArrayList of SqlGuids.
    Dim sqlGuidList As New ArrayList()
    sqlGuidList.Add(New SqlGuid("3AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE"))
    sqlGuidList.Add(New SqlGuid("2AAAAAAA-BBBB-CCCC-DDDD-1EEEEEEEEEEE"))
    sqlGuidList.Add(New SqlGuid("1AAAAAAA-BBBB-CCCC-DDDD-3EEEEEEEEEEE"))

    ' Sort the SqlGuids. The unsorted SqlGuids are in the same order
    ' as the unsorted Guid values.
    sqlGuidList.Sort()

    ' Display the sorted SqlGuids. The sorted SqlGuid values are 
    ' ordered differently than the Guid values.
    Console.WriteLine("Sorted SqlGuids:")
    For Each sqlGuidValue As SqlGuid In sqlGuidList
        Console.WriteLine("{0}", sqlGuidValue)
    Next
End Sub

In dit voorbeeld worden de volgende resultaten gegenereerd.

Unsorted Guids:  
3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee  
2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee  
1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee  
  
Sorted Guids:  
1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee  
2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee  
3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee  
  
Sorted SqlGuids:  
2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee  
3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee  
1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee  

Zie ook