Partilhar via


Comparando valores de GUID e uniqueidentifier

O tipo de dados GUID (identificador global exclusivo) no SQL Server é representado pelo tipo de dados uniqueidentifier, que armazena um valor binário de 16 bytes. Um GUID é um número binário, e seu uso principal é como um identificador que deve ser exclusivo em uma rede que tem muitos computadores em muitos sites. Os GUIDs podem ser gerados chamando a função Transact-SQL NEWID, e é garantido que serão únicos em todo o mundo. Para obter mais informações, consulte uniqueidentifier (Transact-SQL).

Trabalhando com valores SqlGuid

Como os valores GUIDs são longos e obscuros, eles não são significativos para os usuários. Se forem usados GUIDs gerados aleatoriamente para valores-chave e se inserirem múltiplas linhas, obter-se-á E/S aleatória nos índices, o que pode afetar negativamente o desempenho. GUIDs são também relativamente grandes quando comparados a outros tipos de dados. Em geral, recomendamos o uso de GUIDs apenas para cenários muito estreitos para os quais nenhum outro tipo de dados é adequado.

Comparando valores de GUID

Os operadores de comparação podem ser usados com uniqueidentifier valores. No entanto, a ordenação não é implementada comparando os padrões de bits dos dois valores. As únicas operações permitidas em relação a um uniqueidentifier valor são comparações (=, <>, <, >, <=, >=) e verificação de NULL (IS NULL e IS NOT NULL). Não são permitidos outros operadores aritméticos.

Ambos Guid e SqlGuid têm um CompareTo método para comparar diferentes valores GUID. No entanto, System.Guid.CompareTo e SqlTypes.SqlGuid.CompareTo são implementados de forma diferente. SqlGuid implementa CompareTo usando o comportamento do SQL Server, nos últimos seis bytes de um valor são mais significativos. Guid Avalia todos os 16 bytes. O exemplo a seguir demonstra essa diferença comportamental. A primeira seção de código exibe valores não classificados Guid e a segunda seção de código mostra os valores classificados Guid . A terceira seção mostra os valores classificados SqlGuid . A saída é exibida abaixo da listagem de código.

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($" {guidValue}");
    }
    Console.WriteLine("");

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

    // Display the sorted Guid values.
    Console.WriteLine("Sorted Guids:");
    foreach (Guid guidSorted in guidList)
    {
        Console.WriteLine($" {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($" {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

Este exemplo produz os seguintes resultados.

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  

Ver também