2010-06-23 2 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를 이렇게 같은 : 인덱스가 존재하는 경우 (DROP_EXISTING없이) 생성 ELSE –

+0

을 DROP_EXISTING로 만들 @ PhilipKelley 사실이지만이 코드는 Dublicate 코드를 만듭니다. 이 문제를 처리하기위한 추가 제안 사항이 있습니까? – Magier

답변

6

예, 제한이 DROP_EXISTING입니다. 색인이 아직 없으면 실패합니다! (적어도 MS SQL 2000 및 2005)

참조 : http://www.mssqltips.com/tip.asp?tip=1362 성능상의 이유로

+2

SQL Server 2008 R2에 대한 동일한 제한을 확인할 수 있습니다 –

+2

SQL 2016 SP1에서이 버그가있는 동작을 확인할 수 있습니다. – Magier

+0

이것은 말도 안되는 한계입니다. –

관련 문제