Dela via


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  

Se även