Sql server 禁用表中的索引后出错

Sql server 禁用表中的索引后出错,sql-server,tsql,Sql Server,Tsql,我想做批量插入,但需要很长时间。我的想法是禁用表上的索引,以便更快地进行插入。但在那之后,我得到了这个错误: 错误:查询处理器无法生成计划,因为表或视图“CRMD\u MKTTG\u TG\u I”上的索引CRMD\u MKTTG\u TG\u I”已禁用 我正在使用以下脚本生成我的表: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [CRMD_MKTTG_TG_I]

我想做批量插入,但需要很长时间。我的想法是禁用表上的索引,以便更快地进行插入。但在那之后,我得到了这个错误:

错误:查询处理器无法生成计划,因为表或视图“
CRMD\u MKTTG\u TG\u I
”上的索引
CRMD\u MKTTG\u TG\u I
”已禁用

我正在使用以下脚本生成我的表:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [CRMD_MKTTG_TG_I](
    [CLIENT] [nvarchar](3) NOT NULL,
    [GUID] [varbinary](16) NOT NULL,
    [TG_GUID] [varbinary](16) NULL,
    [BP_GUID] [varbinary](16) NULL,
    [BP_ORG] [nvarchar](2) NOT NULL,
    [BP_DEL] [nvarchar](1) NOT NULL,
    [REL_GUID] [varbinary](16) NULL,
    [RELATIONSHIP] [nvarchar](6) NOT NULL,
    [TYPE_BP_GUID] [nvarchar](1) NOT NULL,
    [TYPE_REL_GUID] [nvarchar](1) NOT NULL,
    [ROW_NUMBER] [int] NOT NULL,
 CONSTRAINT [CRMD_MKTTG_TG_I~0] PRIMARY KEY CLUSTERED 
(
    [CLIENT] ASC,
    [GUID] 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

SET ANSI_PADDING OFF
GO

有什么想法吗?

[CRMD\u MKTTG\u TG\u I~0]
是一个聚集索引。如果禁用它,则无法访问数据(选择、插入、更新、删除数据)

阅读:

  • 禁用索引会阻止用户访问该索引
  • 和用于基础表数据的聚集索引
在这种情况下,您只能:

  • 删除聚集索引并将其转换为堆
  • 查询您的表
  • 然后创建一个新的聚集索引

禁用聚集索引可以更快地完成任务?您可能希望退一步,问“如果有此数据,如何加快此表上的大容量插入”,并提供数据的详细信息(包括源数据相对于聚集索引列的顺序)、行数、当前所用时间、,还有你的bcp声明。提前做一点诊断可能会有助于找出什么是慢的——例如,如果您受到网络带宽的限制,删除索引是没有意义的。CRMD_MKTTG_TG_I~0是集群索引。你不能禁用它。那个PK对我来说很奇怪。为什么单凭GUID还不足以进行PK?为什么不让[ROW_NUMBER]成为PK?按主键顺序插入以最小化索引碎片。如何:
ALTER index[CRMD\u MKTTG\u TG\u I~0]REBUILD
?您可以使用REBUILD启用禁用的索引。但是,尽管禁用了聚集索引,但仍然无法查询表,因此会出现OP错误。