如果索引不存在,Drop_existing将引发错误

Nit*_*xDM 5 sql indexing sql-server-2000

我正在大型数据库上创建/更改大量索引.如果索引已存在,则执行此操作.

CREATE UNIQUE CLUSTERED
INDEX [table1_1] ON [dbo].[table1] ([col1], [col2], [col3])
WITH DROP_EXISTING ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

但如果它不存在错误.

所以我把我的脚本改为:

IF EXISTS (SELECT name FROM sysindexes WHERE name = 'table1_1') DROP INDEX [table1].[table1_1]
CREATE UNIQUE CLUSTERED
INDEX [table1_1] ON [dbo].[table1] ([col1], [col2], [col3])
ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

所以问题是我使用WITH DROP_EXISTING错了吗?

Bro*_*ams 6

是的,这是一个限制DROP_EXISTING,如果索引尚不存在,它确实会失败!(至少在MS SQL 2000和2005上)

参考:http://www.mssqltips.com/tip.asp? tt = 1362

  • 我可以确认SQL Server 2008 R2的相同限制 (2认同)
  • 我可以在SQL 2016 SP1上确认这种错误行为. (2认同)
  • 这是一个荒谬的限制 (2认同)