使用SQL Server 2008 R2
考虑一个声明的表 * 变量 *,如下所示:
DECLARE @t TABLE (PK int IDENTITY(1,1) PRIMARY KEY CLUSTERED, Col1 int, Col2 int)
我如何对任何名称ON @t
(包括(Con1 ASC, Col2 ASC)
)执行CREATE NONCLUSTERED INDEX
不应将索引限制为唯一值。
出于某种原因,我不设法弄清楚这一点...
使用SQL Server 2008 R2
考虑一个声明的表 * 变量 *,如下所示:
DECLARE @t TABLE (PK int IDENTITY(1,1) PRIMARY KEY CLUSTERED, Col1 int, Col2 int)
我如何对任何名称ON @t
(包括(Con1 ASC, Col2 ASC)
)执行CREATE NONCLUSTERED INDEX
不应将索引限制为唯一值。
出于某种原因,我不设法弄清楚这一点...
4条答案
按热度按时间unhi4e5o1#
在最近的版本中,您可以创建内联索引。
然而,这是标记为SQL Server 2008的。在那里,您可以创建一个非聚集索引,如下所示。
如果目的是
Col1, Col2
本身是唯一的,则从列列表中删除PK
。虽然从表面上看,这似乎在(
PK
)中添加了一个额外的列,但索引结构将与仅在#temp
表的Col1, Col2
上创建非唯一索引相同。对于非唯一非聚集索引,SQL Server总是将CI键隐式添加到NCI键。2这只是显式显示它。
请参阅卡伦·德莱尼More About Nonclustered Index Keys
23c0lvtd2#
您不能。
declare
(<table_type_definition>
):定义表数据类型。表声明包括列定义、名称、数据类型和约束条件。允许的约束条件类型只有PRIMARY KEY、UNIQUE、NULL和CHECK。
注意,没有提到索引。
如果需要索引,请创建一个临时表(
CREATE TABLE #t (...
).7fhtutme3#
如果需要索引-请使用临时表(
CREATE TABLE #T
或CREATE TABLE ##T
)这是表变量的主要缺点之一,另外两个缺点是:
gcuhipw94#
您无法在数据表变数上建立非丛集、非唯一索引。它只支援唯一索引。请参阅here。
您应该改为查看本地临时表。无论如何,对于大型数据集执行效果更好。