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