테이블 생성시 클러스터형 인덱스 생성 실패


10

다음 스크립트를 실행할 때 오류가 발생했습니다.

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
  WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='Table_Name')
BEGIN
CREATE TABLE Table_Name
(
    Field_Name_1 binary(32) NOT NULL CONSTRAINT PK_Name_Goes_Here PRIMARY KEY NONCLUSTERED
    , Field_Name_2 int NOT NULL 
    , Field_Name_3 datetime NOT NULL INDEX IX_Name_Goes_Here CLUSTERED
)
END 

특히 다음과 같은 오류가 발생하는 클러스터형 인덱스 생성입니다.

메시지 1018, 수준 15, 상태 1, 줄 15
'INDEX'근처의 구문이 잘못되었습니다. 이것이 테이블 힌트의 일부로 의도 된 경우 이제 WITH 키워드와 괄호가 필요합니다. 적절한 구문은 SQL Server 온라인 설명서를 참조하십시오.

특정 QA 서버를 제외한 모든 서버에서 작동하기 때문에 이상합니다. 우리가 해결 한 해결책은 테이블 생성 문 외부에서 클러스터형 인덱스를 만드는 것입니다.

답변:


11

그 불구하고 인라인 인덱스 선언에 대한 구문은 SQL 서버 2014에 추가 된 IS가 있었다 절대적으로 명확 공식 CREATE TABLE문서 . 설명서 소유자와 대화 한 후이 주제는 이제 인라인 인덱스 구문이 SQL Server 2014부터 (2016 년의 일부 변형)에만 유효하다는 것을 정확하게 반영합니다.

여기에 이미지 설명을 입력하십시오

이 구문이 작동하는 다른 인스턴스는 SQL Server 2014 이상이어야합니다.

호환성 수준에 관계없이 2012 년에는 인덱스를 별도로 만들어야합니다.


-9

확실히 알기 위해 SSMS를 통해 실행해야하지만 그 구문은 나에게 달려 있습니다. 열을 기본 키로 인라인으로 정의했지만 (여러분처럼) 기본 키가 아닌 클러스터형 인덱스를 정의하려고 시도한 적이 없습니다. 사용중인 SQL Server 버전에서는 단순히 수행중인 작업이 불가능합니다. CREATE TABLE 문을 통해 테이블을 만든 후에 표준 CREATE INDEX를 사용하여 클러스터형 인덱스를 정의해야한다고 생각합니다.


2
처음 보았을 때도 이상하게 보였지만 dev 상자 (vvnext까지)를 포함한 다른 모든 상자에서 잘 작동합니다. 그리고 두 인덱스를 모두 잘 만듭니다.
Rich Benner

아마도 서버에서 실행되는 SQL Server 버전 및 / 또는 데이터베이스의 SQL 호환 모드에 연결되어 있습니까? SQL Server는 수년에 걸쳐 많은 '구문 설탕'을 추가했습니다. 충분히 돌아 가면 변수를 선언하고 같은 줄에 설정할 수도 없습니다.
Matthew Sontum
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.