2011-02-23 20 views
1

只是想檢查一下,如果我們能夠在用戶定義的表變量上創建索引。我知道我們可以在UDT上創建PK。這是否意味着PK在內部創建(聚集)索引?如果UDT上的列上有可能存在索引,那麼索引數據的存儲位置是什麼?我可以在用戶定義的表變量上創建索引嗎?

+0

您是指用戶定義表類型還是表變量? (它不會改變很多答案,只是要鏈接到正確的MSDN頁面是不同的: - |) – 2011-02-23 13:39:04

+0

表變量 – user203687 2011-02-23 15:20:31

回答

3

使用表變量,您可以定義primary key and unique constraints,但您無法定義 任何聚類行爲。這些索引與表變量中的實際數據一起存儲 - 希望在tempdb中的內存中存儲,但如果內存壓力很高,則必要時會溢出到磁盤中。

您無法在這些表上定義任意索引。

0

但是,您可以在臨時表上定義所需的任何索引。

4

要定義表變量的索引,請使用primary keyunique約束條件。你可以提名一個聚類。

  • 如果您需要非唯一字段的索引,只需將唯一鍵添加到索引列列表的末尾,以使其唯一。

  • 如果表變量沒有唯一字段,請使用標識列添加一個虛擬唯一字段。

事情是這樣的:

declare @t table (
    dummy identity primary key nonclustered, 
    val1 nvarchar(50), 
    val2 nvarchar(50), 
    unique clustered (val1, dummy) 
) 

現在你有一個非唯一字段VAL1一個聚集索引的表變量。

相關問題