Comparaison du GUID et des valeurs uniqueidentifierComparing GUID and uniqueidentifier Values

Le type de données GUID (Identificateur Global Unique) dans SQL Server est représenté par le type de données uniqueidentifier, qui stocke une valeur binaire de 16 octets.The globally unique identifier (GUID) data type in SQL Server is represented by the uniqueidentifier data type, which stores a 16-byte binary value. Un GUID est un nombre binaire et son usage principal est celui d'identificateur qui doit être unique dans un réseau comportant de nombreux ordinateurs implantés dans de nombreux sites.A GUID is a binary number, and its main use is as an identifier that must be unique in a network that has many computers at many sites. Il est possible de générer des GUID en appelant la fonction Transact-SQL NEWID et il est garanti qu'ils sont uniques dans le monde entier.GUIDs can be generated by calling the Transact-SQL NEWID function, and is guaranteed to be unique throughout the world. Pour plus d'informations, voir « Using uniqueidentifier Data » dans la documentation en ligne de SQL Server.For more information, see "Using uniqueidentifier Data" in SQL Server Books Online.

Utilisation de valeurs SqlGuidWorking with SqlGuid Values

Comme les valeurs GUID sont longues et obscures, elles ont peu de signification pour les utilisateurs.Because GUIDs values are long and obscure, they are not meaningful for users. Si des GUID générés de façon aléatoire sont utilisés pour les valeurs clés et si vous insérez un grand nombre de lignes, vous obtenez des E/S aléatoires dans les index, ce qui peut contribuer à altérer les performances.If randomly generated GUIDs are used for key values and you insert a lot of rows, you get random I/O into your indexes, which can negatively impact performance. Les GUID sont également relativement volumineux en comparaison d'autres types de données.GUIDs are also relatively large when compared to other data types. En règle générale, il est recommandé d'utiliser les GUID uniquement pour des scénarios très restrictifs pour lesquels aucun autre type de données ne convient.In general we recommend using GUIDs only for very narrow scenarios for which no other data type is suitable.

Comparaison de valeurs GUIDComparing GUID Values

Des opérateurs de comparaison peuvent être utilisés avec des valeurs uniqueidentifier.Comparison operators can be used with uniqueidentifier values. Toutefois, la mise en ordre n’est pas implémentée en comparant les modèles binaires des deux valeurs.However, ordering is not implemented by comparing the bit patterns of the two values. Les seules opérations autorisées sur un uniqueidentifier valeur sont les comparaisons (=, <>, <, >, <=, > =) et la vérification de la valeur NULL (IS NULL et IS NOT NULL).The only operations that are allowed against a uniqueidentifier value are comparisons (=, <>, <, >, <=, >=) and checking for NULL (IS NULL and IS NOT NULL). Aucun autre opérateur arithmétique n'est autorisé.No other arithmetic operators are allowed.

Guid et SqlGuid possèdent tous deux une méthode CompareTo pour comparer différentes valeurs GUID.Both Guid and SqlGuid have a CompareTo method for comparing different GUID values. Toutefois, System.Guid.CompareTo et SqlTypes.SqlGuid.CompareTo sont implémentés différemment.However, System.Guid.CompareTo and SqlTypes.SqlGuid.CompareTo are implemented differently. SqlGuid implémente CompareTo à l'aide du comportement SQL Server, dans lequel les six derniers octets d'une valeur sont significatifs.SqlGuid implements CompareTo using SQL Server behavior, in the last six bytes of a value are most significant. Guid évalue les 16 octets.Guid evaluates all 16 bytes. L'exemple suivant illustre cette différence de comportement.The following example demonstrates this behavioral difference. La première section du code affiche les valeurs Guid non triées et la seconde les valeurs Guid triées.The first section of code displays unsorted Guid values, and the second section of code shows the sorted Guid values. La troisième section affiche les valeurs SqlGuid triées.The third section shows the sorted SqlGuid values. La sortie s'affiche sous les codes.The output is displayed beneath the code listing.

private static void WorkWithGuids()
{
    // Create an ArrayList and fill it with Guid values.
    ArrayList guidList = 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:");
    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 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:");
    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

Cet exemple génère les résultats suivants :This example produces the following results.

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  

Voir aussiSee Also

Types de données SQL Server et ADO.NETSQL Server Data Types and ADO.NET
Fournisseurs managés ADO.NET et centre de développement DataSetADO.NET Managed Providers and DataSet Developer Center