我有一个表Log:
Microsoft.Azure.DataLake.Tools.VisualStudio.Extension.vsix
PK是 <a href={`some app here`}>
//Similar logic to mailto
,我们在列CREATE TABLE [dbo].[Log]
(
[Id] [INT] IDENTITY(1,1) NOT NULL,
[Date] [DATETIME] NOT NULL,
[Thread] [VARCHAR](255) NOT NULL,
[Level] [VARCHAR](50) NOT NULL,
[Logger] [VARCHAR](255) NOT NULL,
[Message] [VARCHAR](4000) NOT NULL,
[Exception] [VARCHAR](2000) NULL,
CONSTRAINT [PK_Log]
PRIMARY KEY NONCLUSTERED ([Id] ASC)
)
上创建了索引后将其分区,并将PK更改为非聚集:
Id
分区创建成功。
现在,我们要使用Truncate删除分区:
[Date]
但是出现此错误:
TRUNCATE TABLE语句失败。索引“ PK_Log”未分区,但表“ Log”使用分区函数“ myDateRangePF”。索引和表必须使用等效的分区函数。
这是否意味着分区表只能有一个索引?如果现有表具有多个索引,为了将其截断,我们必须首先删除所有索引吗?
谢谢
答案 0 :(得分:2)
问题是您创建了索引PK_Log...ON [PRIMARY]
,这使其成为分区表上的未分区索引。您将需要删除该索引(可能还有其他未分区的索引)并重新创建它。要么明确指定分区文件组,要么不使用ON
子句,然后让SQL Server选择该文件组。默认情况下,它将在与基础表相同的文件组上并且在与表相同的分区上创建索引。
有关其他信息,请参见BOL中的Partitioned Indexes。