2010-06-23 57 views
5

我正在創建/更改大型數據庫上的大量索引。如果索引已經存在,這樣做是有效的。如果索引不存在,Drop_existing會拋出一個錯誤

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

但是,如果它不存在的錯誤。

所以我改變了我的腳本:

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] 

所以,問題是我在帶DROP_EXISTING錯用?

+2

出於性能考慮,你可能想的if/else它像這樣:IF指數存在然後用DROP_EXISTING ELSE創建(不DROP_EXISTING) – 2010-06-24 15:04:50

+0

創建@ PhilipKelley是真實的,但是這會創建dublicate代碼。任何其他建議來處理這個問題? – Magier 2017-07-11 15:35:01

回答

6

是的,那是DROP_EXISTING的限制,如果索引不存在,它會失敗! (至少在MS SQL 2000和2005年)

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

+2

我可以確認SQL Server 2008 R2的相同限制 – 2015-12-14 19:09:48

+2

我可以在SQL 2016 SP1上確認這個錯誤行爲。 – Magier 2017-07-11 15:34:11

+0

這是一個荒謬的限制 – 2018-02-25 13:06:39

相關問題