我正在使用sql server 2005/2008,我有一张表,它的PK(rec_index)也被编入索引。
CREATE TABLE [dbo].[MyTable]
(
[rec_index] INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
file_desc nvarchar(50),
is_modified bit
)
但遗憾的是,我的数据库中已有一个这样的表,其中没有索引创建了O。
我如何询问已经索引的表是否无效,否则添加索引?我不能放弃它而不是重新创建它,因为我将丢失数据。
我正在寻找像"if not exists <index for rec_index> do <create index for rec_index>"
答案 0 :(得分:0)
可能是这样的:
IF NOT EXISTS ( select *
from sys.objects
where parent_object_id = object_id('MyTable')
and type = 'PK' )
do <create index for rec_index>
答案 1 :(得分:0)
这里有很多可能性,我不确定你打的是哪种情况,以及你想在每种情况下做什么:
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
您当然可以从系统元数据中对每个场景执行检查,并做出相应的反应。但是你需要帮助我们缩小“没有索引”的意思。