从表中截断分区失败(SQL Server)

时间:2018-12-06 17:51:26

标签: sql sql-server

我有一个表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”。索引和表必须使用等效的分区函数。

这是否意味着分区表只能有一个索引?如果现有表具有多个索引,为了将其截断,我们必须首先删除所有索引吗?

谢谢

1 个答案:

答案 0 :(得分:2)

问题是您创建了索引PK_Log...ON [PRIMARY],这使其成为分区表上的未分区索引。您将需要删除该索引(可能还有其他未分区的索引)并重新创建它。要么明确指定分区文件组,要么不使用ON子句,然后让SQL Server选择该文件组。默认情况下,它将在与基础表相同的文件组上并且在与表相同的分区上创建索引。

有关其他信息,请参见BOL中的Partitioned Indexes