在表变量上创建非聚集索引

时间:2019-02-08 12:48:21

标签: sql sql-server

如何在下面的表变量上创建非聚集索引?我尝试过,但是抛出异常

  

“ @ TBL”附近的语法不正确

我的代码:

DECLARE @TBL TABLE(ID INT PRIMARY KEY, FROMDATE DATETIME, TODATE DATETIME)

CREATE NONCLUSTERED INDEX IX_myindex 
ON @TBL (FROMDATE);  

谢谢

2 个答案:

答案 0 :(得分:3)

您必须在表定义中声明索引。尽管支持索引(自SQL Server 2014起),但CREATE INDEX语法不支持表变量。所以:

DECLARE @TBL TABLE (
    ID INT PRIMARY KEY,
    FROMDATE DATETIME,
    TODATE DATETIME,
    INDEX idx_tbl_fromdate (FROMDATE)
);

Here是db <>小提琴。

编辑:

如果要使用带有索引的临时表,请使用临时表。如果您的版本支持此语法,则可以执行以下操作:

CREATE temp_table (
    ID INT PRIMARY KEY,
    FROMDATE DATETIME,
    TODATE DATETIME,
    INDEX idx_tbl_fromdate (FROMDATE)
);

否则,请分别创建索引。

答案 1 :(得分:0)

您可以在表变量定义中定义INDEX

DECLARE @TBL TABLE (
     ID INT PRIMARY KEY, 
     FROMDATE DATETIME, 
     TODATE DATETIME
     INDEX FROMDATE NONCLUSTERED
)