Partilhar via


Comparando valores de GUID e uniqueidentifier

Baixar ADO.NET

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 cujo principal uso é como um identificador que deve ser exclusivo em uma rede com vários computadores em muitos sites. Os GUIDs podem ser gerados chamando a função NEWID do Transact-SQL e têm a garantia de serem exclusivos em todo o mundo. Para obter mais informações, confira uniqueidentifier (Transact-SQL).

Como trabalhar com valores de SqlGuid

Já que os valores de GUIDs são longos e obscuros, eles não são significativos para os usuários. Se GUIDs gerados aleatoriamente forem usados para valores de chave e você inserir muitas linhas, você obterá E/S aleatórias em seus índices, o que poderá afetar negativamente o desempenho. Os GUIDs também são relativamente grandes quando comparados a outros tipos de dados. Em geral, recomendamos o uso de GUIDs apenas em cenários muito restritos, para os quais nenhum outro tipo de dados é adequado.

Comparação de valores de GUID

Operadores de comparação podem ser usados com valores uniqueidentifier. Entretanto, a ordenação não é implementada comparando os padrões de bit dos dois valores. As únicas operações que são permitidas em um valor uniqueidentifier são as comparações (=, <>, <, >, <=, >=) e a verificação de NULL (IS NULL e IS NOT NULL). Nenhum outro operador aritmético é permitido.

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

using System.Data.SqlTypes;
using System.Collections;

class Program
{
    static void Main()
    {
        WorkWithGuids();
        Console.ReadLine();
    }
    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);
        }
    }
}

Esse exemplo gera os resultados a seguir.

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  

Próximas etapas