包括在SQL Server 2008 Express中覆盖索引时不可用

时间:2010-11-12 17:34:02

标签: sql-server sql-server-2008 indexing ssms

在MS SQL Server Manager Studio for 2008 Express中,“包含的列”字段始终在数据库图表设计器的“索引/键”窗口中显示为灰色。

根据帮助,只要我没有创建聚簇索引,就应该可以使用它。

此外,如果我运行查询来创建索引(运行正常),则创建的查询不会列出添加的表。

我没有看到MS在Express版本中说这个功能不可用的地方。

有什么想法吗?

更多数据:

这是创建表格的脚本:

CREATE UNIQUE INDEX IX_SocialTypes_Cover ON ClientSocialTypes(ClientID, SocialTypeID, [Source]) INCLUDE (URLID)

这是表格脚本(索引缺失):

CREATE TABLE [dbo].[ClientSocialTypes](
    [SocialTypeID] [int] IDENTITY(1,1) NOT NULL,
    [ClientID] [int] NOT NULL,
    [SocialTypeClassID] [tinyint] NOT NULL,
    [Source] [nvarchar](50) NOT NULL,
    [TagCount] [int] NOT NULL,
    [URLID] [int] NULL,
 CONSTRAINT [PK_ClientSources] PRIMARY KEY CLUSTERED 
(
    [SocialTypeID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]    
GO

ALTER TABLE [dbo].[ClientSocialTypes]  WITH CHECK ADD  CONSTRAINT [FK_ClientSocialTypes_Clients] FOREIGN KEY([ClientID])
REFERENCES [dbo].[Clients] ([ClientID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[ClientSocialTypes] CHECK CONSTRAINT [FK_ClientSocialTypes_Clients]
GO

ALTER TABLE [dbo].[ClientSocialTypes]  WITH CHECK ADD  CONSTRAINT [FK_ClientSocialTypes_SocialTypeClasses] FOREIGN KEY([SocialTypeClassID])
REFERENCES [dbo].[SocialTypeClasses] ([SocialTypeClassID])
GO

ALTER TABLE [dbo].[ClientSocialTypes] CHECK CONSTRAINT [FK_ClientSocialTypes_SocialTypeClasses]
GO

ALTER TABLE [dbo].[ClientSocialTypes] ADD  CONSTRAINT [DF_ClientSocialTypes_SocialTypeClassID]  DEFAULT ((1)) FOR [SocialTypeClassID]
GO

ALTER TABLE [dbo].[ClientSocialTypes] ADD  CONSTRAINT [DF_ClientSocialTypes_TagCount]  DEFAULT ((0)) FOR [TagCount]
GO

ALTER TABLE [dbo].[ClientSocialTypes] ADD  CONSTRAINT [DF_ClientSocialTypes_HasTrackedURL]  DEFAULT ((0)) FOR [URLID]
GO

3 个答案:

答案 0 :(得分:9)

有两个不同的索引对话框。一个古老的可怕的可怕的,一个新的(只是刚发现它),实际上让你改变这些东西。

OLD HORRIBLE ONE

  • 右键单击主表列表中的表格
  • 点击'设计'
  • 右键单击列列表,然后选择'索引/键'

这不允许您更改包含的列。

NEW NICE ONE

  • 展开主表格列表中的表格,以显示'列','键','约束''触发器'等文件夹
  • 展开Indexes文件夹
  • 右键单击Indexes
  • New Index文件夹
  • 右键单击现有索引,然后单击Properties以编辑现有索引

这个更新的对话框可以让你做更多的事情,我对微软保持原有状态以及我花了多长时间发现它感到很失望。

答案 1 :(得分:7)

事实证明,这在SQL Server的完整版本中也是灰色的。在SSMS中,使用对象资源管理器(而不是Designer)导航到{database_name}>表> {table_name}>用于管理包含。

的索引的索引

答案 2 :(得分:1)

索引实际上可能是唯一约束(使用CREATE / ALTER TABLE),而不是使用CREATE INDEX创建的索引。唯一约束不允许INCLUDE。

这很令人困惑......为索引/键输入或表生成一个脚本,你就可以确认了。

编辑:

  • 单独创建索引时,必须刷新对象资源管理器

  • 您是否在不同的架构中有2个SocialType表? (例如dbo.SocialType[domain\myuser].SocialType)。如果您未在DDL语句中指定架构,则会发生这种情况。