共用方式為


比較 GUID 和 唯一識別碼 值

SQL Server 中的全域唯一標識碼 (GUID) 數據類型是以數據類型表示 uniqueidentifier ,其會儲存 16 位元組二進位值。 GUID 是二進制數字,其主要用途是在有多台電腦的網路中作為必須唯一的識別碼。 GUIDs 可以藉由呼叫 Transact-SQL NEWID 函數生成,並保證在全球範圍內是唯一的。 如需詳細資訊,請參閱 uniqueidentifier (Transact-SQL)。

使用 SqlGuid 值

因為 GUID 值很長且模糊不清,所以對用戶來說並不有意義。 如果使用隨機生成的 GUID 作為索引鍵的值,並且插入大量資料列,這會在索引中造成隨機 I/O,從而對效能產生負面影響。 相較於其他數據類型,GUID 也相對較大。 一般而言,我們建議只針對沒有其他數據類型適合的非常窄的案例使用 GUID。

比較 GUID 值

比較運算子可以搭配 uniqueidentifier 值使用。 不過,不會藉由比較兩個值的位模式來實作排序。 唯一允許針對uniqueidentifier值進行的運算是比較(=、<>、<、>、<=、>=)和檢查 NULL(IS NULL 和 IS NOT NULL)。 不允許其他算術運算子。

GuidSqlGuid 都有一個 CompareTo 方法來比較不同的 GUID 值。 不過, System.Guid.CompareToSqlTypes.SqlGuid.CompareTo 會以不同的方式實作。 SqlGuid 透過 SQL Server 的行為來實作 CompareTo,在值的最後六個字節是最重要的。 Guid 會評估所有16個字節。 下列範例示範此行為差異。 程序代碼的第一個區段會顯示未排序 Guid 的值,而程式代碼的第二個區段會顯示已 Guid 排序的值。 第三個區段會顯示已 SqlGuid 排序的值。 輸出會顯示在程式代碼清單下方。

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

此範例會產生下列結果。

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  

另請參閱