有这么多的可能性在这里,我不知道哪种情况,你打的,和你要在每种情况下要做到:
USE [tempdb];
-- table with a clustered PK
CREATE TABLE dbo.TableA(rec_index INT IDENTITY(1,1) PRIMARY KEY CLUSTERED);
-- table with non-clustered PK
CREATE TABLE dbo.TableB(rec_index INT IDENTITY(1,1) PRIMARY KEY NONCLUSTERED);
-- table with no PK, no indexes
CREATE TABLE dbo.TableC(rec_index INT IDENTITY(1,1));
-- table with no PK, non-clustered non-unique index
CREATE TABLE dbo.TableD(rec_index INT IDENTITY(1,1));
CREATE INDEX d ON dbo.TableD(rec_index);
-- table with no PK, clustered non-unique index
CREATE TABLE dbo.TableE(rec_index INT IDENTITY(1,1));
CREATE CLUSTERED INDEX e ON dbo.TableE(rec_index);
-- table with no PK, non-clustered unique index
CREATE TABLE dbo.TableF(rec_index INT IDENTITY(1,1));
CREATE UNIQUE INDEX f ON dbo.TableF(rec_index);
-- table with no PK, clustered unique index
CREATE TABLE dbo.TableG(rec_index INT IDENTITY(1,1));
CREATE UNIQUE CLUSTERED INDEX g ON dbo.TableG(rec_index);
-- table with unique clustered index, but PK on different column
CREATE TABLE dbo.TableH(rec_index INT IDENTITY(1,1),
b INT PRIMARY KEY NONCLUSTERED);
CREATE UNIQUE CLUSTERED INDEX h ON dbo.TableH(rec_index);
GO
DROP TABLE dbo.TableA,dbo.TableB,dbo.TableC,dbo.TableD,
dbo.TableE,dbo.TableF,dbo.TableG,dbo.TableH;
GO
你当然可以进行检查每一个从系统元数据的这些方案,并做出相应的反应。但是你需要帮助我们缩小“没有指数”的含义。
1)是的,它的PRIMARY KEY被索引。当它被声明为PK时,它会自动编制索引,2)通过删除索引,不会丢失实际数据,尽管索引重建可能很耗时,所以您可能仍然希望避免它。你真的想/需要这个单独的索引吗? –
*'不过不幸的是,我已经在我的数据库中创建了一个没有索引的类似于这样的表格。'* - 您的意思是您没有在该表格的脚本中的'PRIMARY KEY'之后指定'CLUSTERED'?或者,也许你没有指定'PRIMARY KEY'? –
如果你发现一个PK并且它没有聚集,你想要做什么?或者聚集索引已经存在,但它不在rec_index列上?一个表只能有一个PK,只有一个聚集索引 - 它们不必是相同的约束/索引。我同意@Andriy--是PK没有聚集的问题,还是根本没有PK? –