我需要在两列(在表变量中)创建一个不形成唯一键的索引。
表结构如下所示 -
DECLARE @Sample TABLE (
[AssetSk] [int] NOT NULL,
[DateSk] [int] NOT NULL,
[Count] [numeric](38, 2) NULL
)
我正在尝试添加索引,如下所示 -
INDEX AD1 CLUSTERED([AssetSk],[DateSk])
然而,在SQL Server 2012上运行它时会出现以下错误 " ' INDEX'附近的语法不正确。如果这是作为表提示的一部分,则现在需要A WITH关键字和括号。有关正确的语法,请参阅SQL Server联机丛书。"
但是,这在SQL Server 2014上完美运行。有什么办法可以在SQL Server 2012上运行它。
答案 0 :(得分:4)
您不能使用2014年之前的SQL Server版本在表变量上构建除唯一键之外的索引。
但是,您可以这样做:添加一个具有自动增量值的colummn,并创建包含您需要的列和新列的唯一索引。
DECLARE @Sample TABLE (
[ID] bigint identity(1, 1),
[AssetSk] [int] NOT NULL,
[DateSk] [int] NOT NULL,
[Count] [numeric](38, 2) NULL,
UNIQUE NONCLUSTERED ([AssetSk],[DateSk], ID)
)
更新:实际上,在表变量上创建这样的索引可能毫无用处。通常,SQL Server估计表变量只有一行,因此它不会以相对较高的概率使用此索引。
答案 1 :(得分:1)
据我所知,在SQL Server 2012及更低版本中,您无法向表变量添加索引。要添加索引,您必须声明表格如下:
CREATE TABLE #Sample (
[AssetSk] [int] NOT NULL,
[DateSk] [int] NOT NULL,
[Count] [numeric](38, 2) NULL
)
在您创建索引后,您需要像这样
CREATE CLUSTERED INDEX IX_MyIndex
ON #Sample ([AssetSk],[DateSk])
当然,在您完成四个功能的表后,您可以调用
DROP TABLE #Sample