在 table 变量上创建索引子句
create index clause on table variable
我需要在不构成唯一键的两列(在 table 变量内)上创建索引。
Table结构如下图-
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' 附近的语法不正确。如果这是作为 table 提示的一部分,现在需要 WITH 关键字和括号。有关正确的语法,请参阅 SQL 服务器联机丛书。”。 =13=]
但是,这个 运行 在 SQL Server 2014 上非常完美。有什么办法可以在 SQL Server 2012 上 运行 它。
您不能使用 SQL 2014 年之前的服务器版本在 table 变量上建立唯一键以外的索引。
但是,您可以使用技巧:再添加一个具有自动增量值的列,并创建唯一索引,包括您需要的列和这个新列。
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)
)
更新: 事实上,在 table 变量上创建这样的索引可能是无用的。通常SQL服务器估计一个table变量只有一行,所以它不会使用这个索引的概率比较大。
据我所知,在 SQL Server 2012 及以下版本中,您无法向 table 变量添加索引。要添加索引,您必须像这样声明 table:
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])
当然,当你完成table的四个函数后,你可以调用
DROP TABLE #Sample
我需要在不构成唯一键的两列(在 table 变量内)上创建索引。
Table结构如下图-
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' 附近的语法不正确。如果这是作为 table 提示的一部分,现在需要 WITH 关键字和括号。有关正确的语法,请参阅 SQL 服务器联机丛书。”。 =13=]
但是,这个 运行 在 SQL Server 2014 上非常完美。有什么办法可以在 SQL Server 2012 上 运行 它。
您不能使用 SQL 2014 年之前的服务器版本在 table 变量上建立唯一键以外的索引。
但是,您可以使用技巧:再添加一个具有自动增量值的列,并创建唯一索引,包括您需要的列和这个新列。
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)
)
更新: 事实上,在 table 变量上创建这样的索引可能是无用的。通常SQL服务器估计一个table变量只有一行,所以它不会使用这个索引的概率比较大。
据我所知,在 SQL Server 2012 及以下版本中,您无法向 table 变量添加索引。要添加索引,您必须像这样声明 table:
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])
当然,当你完成table的四个函数后,你可以调用
DROP TABLE #Sample