【问题标题】:How to add Nonunique index on table variable [duplicate]如何在表变量上添加非唯一索引[重复]
【发布时间】:2021-07-04 04:31:28
【问题描述】:

我想在我的函数中创建一个表,但在 OBJECT_ID 上添加非唯一索引时遇到了麻烦。

 DECLARE @VIEW_MY_DATA TABLE
                       (
                           [AREA_ID] INT,
                           [OBJECT_ID] INT,
                           [PARENT_ID] INT,
                           [OBJECT_TYPE] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS,
                           [RELATION] varchar(50)
                       )

我无法在函数中使用CREATE TABLE。如何在 SQL Server 2012 中实现?

【问题讨论】:

  • 您不能索引表变量。
  • 你为什么要CREATE一个表,或者在函数中声明一个表变量?因此,您似乎正在使用多行函数,这比内联函数慢得多。
  • @Lamu 是的,它作为临时表来存储数据,用于后面的sql代码的join。
  • L a r n u... 请。
  • @VIEW_MY_DATA 不是临时表,而是表变量。它们完全不同。但是,再次切换到内联函数;它们的速度要快得多。

标签: sql sql-server temp-tables


【解决方案1】:

虽然您无法为已声明的表变量添加索引,但您可以在 SQL Server 2014 及更高版本中使用表声明的内联语法指定索引和约束:

 DECLARE @VIEW_MY_DATA TABLE
                       (
                           [AREA_ID] INT,
                           [OBJECT_ID] INT INDEX idx NONCLUSTERED,
                           [PARENT_ID] INT,
                           [OBJECT_TYPE] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS,
                           [RELATION] varchar(50)
                       )

【讨论】:

  • 我这种方式有错误INDEX idx NONCLUSTERED
  • SQL Server 2012 中似乎没有此功能。
  • @Larnu,正确,我在问题中错过了 SQL 2012。我会澄清我的答案。
  • 出于兴趣,@DanGuzman,你知道这是在哪个版本中添加的吗?似乎我在补丁说明中错过了这一点。 :)
  • 引用docs:“不能在表变量上显式创建索引,并且不会保留表变量的统计信息。从 SQL Server 2014 (12.x) 开始,新语法是引入它允许您创建与表定义内联的某些索引类型。”
猜你喜欢
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 2015-10-13
  • 2021-12-11
相关资源
最近更新 更多