Jämföra GUID- och uniqueidentifier-värden
Den globalt unika identifierardatatypen (GUID) i SQL Server representeras av uniqueidentifier
datatypen, som lagrar ett binärt värde på 16 byte. Ett GUID är ett binärt tal och dess huvudsakliga användning är som en identifierare som måste vara unik i ett nätverk som har många datorer på många platser. GUID:er kan genereras genom att anropa funktionen Transact-SQL NEWID och är garanterat unik i hela världen. Mer information finns i uniqueidentifier (Transact-SQL).
Arbeta med SqlGuid-värden
Eftersom GUID-värden är långa och dunkla är de inte meningsfulla för användarna. Om slumpmässigt genererade GUID:er används för nyckelvärden och du infogar många rader får du slumpmässig I/O i dina index, vilket kan påverka prestanda negativt. GUID:er är också relativt stora jämfört med andra datatyper. I allmänhet rekommenderar vi endast användning av GUID:er för mycket snäva scenarier där ingen annan datatyp är lämplig.
Jämföra GUID-värden
Jämförelseoperatorer kan användas med uniqueidentifier
värden. Ordningen implementeras dock inte genom att jämföra bitmönstren för de två värdena. De enda åtgärder som tillåts mot ett uniqueidentifier
värde är jämförelser (=, <>, <, , ><=, >=) och kontroll av NULL (ÄR NULL och ÄR INTE NULL). Inga andra aritmetiska operatorer tillåts.
Både Guid och SqlGuid har en CompareTo
metod för att jämföra olika GUID-värden. System.Guid.CompareTo
Men och SqlTypes.SqlGuid.CompareTo
implementeras på olika sätt. SqlGuid implementerar CompareTo
med SQL Server-beteende, i de sista sex byteen av ett värde är mest betydande. Guid utvärderar alla 16 byte. I följande exempel visas den här beteendeskillnaden. Det första kodavsnittet visar osorterade Guid värden, och det andra kodavsnittet visar de sorterade Guid värdena. I det tredje avsnittet visas de sorterade SqlGuid värdena. Utdata visas under kodlistan.
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
Det här exemplet ger följande resultat.
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