2012-12-01 4 views
4

저는 SQL Server에 익숙하지 않습니다. (1980 년대 후반에 DB2를 기억해 냈습니다. DB2는 기억합니다.) 오늘은 데이터베이스 계층을 SQL에 통합하여 시작합니다. SQL 서버.테이블을 만들 때 SQL 서버의 인덱스 이름이 자동으로 지정됩니다.

시작하기. 오늘 나는 모든 데이터베이스 개체, 테이블 개체 및 인덱스를 프로그래밍 방식으로 런타임에 생성합니다. 프로젝트의 거의 모든 시각적 개체 및 데이터 개체와 같습니다. 즉, 시각 디자인 도구를 매우 제한적으로 사용합니다.

데이터베이스 키와 마찬가지로, 그리고 내포물의 위치, 길이, 그림 마스크, 글꼴 크기와 같은 시각적 개체의 경우와 마찬가지로 내 프로젝트의 모든 열에 외부 설명 파일 (모든 사용자가이 파일을 포함하는 프로필 있음)이 있습니다. 등등. 동적 인 형태. 거의 모든 윈도우, 그리드, 필터는 데이터베이스 연결과 거의 동일한 런타임에서 생성됩니다.

나는이 환경에 테이블을 작성하는 작은 테스트 "시스템"을 구축했고, (I는 델파이와 ADO를 사용) 내가 플래그를 할 때

내가 만나는 문제는 프로그램 내에서 테이블을 만들 아니라, 매우 쉽게했다 열을 "자동 증가"로 설정하거나 SQL Server에서 Identity으로 설정하거나 열을 기본 키로 설명하면 SQL Server Management Studio에서 자동으로 인덱스 또는 키를 만듭니다.

내가이 색인이나 키를 제공하는 이름을 관리 할 수 ​​있다면 괜찮을 것입니다. 이 상황

예 :

:

CREATE TABLE GENGITFL 
    (
     NR INT NOT NULL IDENTITY, 
     GJM CHAR(3) NOT NULL, 
     HEITI VARCHAR(25) NOT NULL, 
     KAUPG REAL NULL, 
     SOLUG REAL NULL, 
     TOLLG REAL NULL, 
     DUMMY VARCHAR(20) NULL, 
    UNIQUE (GJM), 
    PRIMARY KEY (GJM) 
    ) 

SQL 서버가 자동으로이 두 인덱스 작성

AdoCommand.CommandText := Str_SQL; 
    TRY 
     AdoCommand.Execute; 
    FINALLY 
     NotiFy_TimeOut ('Table was created', wait_for_one_sec); 
    END; 

내 데이터베이스 엔진은 내가 위의 문자열 Str_SQL에 합격이 SQL 스크립트를 생성

  • PK__GENGITFL__C51F17260A463F49
  • ,210
  • UQ__GENGITFL__C51F17277FA3E6E6

내가 같이 이름을 선호하는 것,이 파일이 이름을 사용하지 않으 :

  • IDX_GENGITFL_GJM
  • IDX_GENGITFL_NR

이유는 명백해야한다 내 소개에 비추어 볼 때 런타임 엔진은이 이름을 자동으로 만들 수 없으며 사용 가능한 인덱스 파일을 찾는 옵션이 아닌 것으로 간주합니다. 시스템 데이터베이스 내에서. 내 외부 설명에 인덱스가 있어야한다고 말한 경우 접두어 인 IDX_ 다음에 테이블 이름을 사용하고 마지막으로 필드 이름 또는 밑줄을 사이에 사용하여 인덱스의 이름을 자동으로 만들고 싶습니다.

누군가가 내 가난한 영어와 프레 젠 테이션을 이해하기를 바랍니다. 나는 영어로 녹슬지.marc_s의 도움 후에 나의 SQL "스크립트"이렇게 있습니다 :

편집

다시 한번 감사

CREATE TABLE GENGITFL 
    (
     NR INT NOT NULL IDENTITY, 
     GJM CHAR(3) NOT NULL, 
     HEITI VARCHAR(25) NOT NULL, 
     KAUPG REAL NULL, 
     SOLUG REAL NULL, 
     TOLLG REAL NULL, 
     DUMMY VARCHAR(20) NULL, 
    CONSTRAINT IDX_GENGITFL_NR UNIQUE (NR), 
    CONSTRAINT IDX_GENGITFL_GJM PRIMARY KEY (GJM), 
    ) 

    CREATE INDEX IDX_GENGITFL_HEITI ON GENGITFL (HEITI) 

감사합니다.

답변

11

시스템 기본 이름을 원하지 않는 경우 - 을 직접 지정하십시오! :

CREATE TABLE GENGITFL 
    (
     NR INT NOT NULL IDENTITY, 
     GJM CHAR(3) NOT NULL, 
     HEITI VARCHAR(25) NOT NULL, 
     KAUPG REAL NULL, 
     SOLUG REAL NULL, 
     TOLLG REAL NULL, 
     DUMMY VARCHAR(20) NULL, 
    CONSTRAINT IDX_GENGITFL_NR UNIQUE (GJM), 
    CONSTRAINT IDX_GENGITFL_GJM PRIMARY KEY (GJM) 
    ) 

UNIQUEPRIMARY KEY 전에 그 CONSTRAINT (yourownnamehere)를 참조하십시오?

이제 제약 조건은 으로 정의되었습니다.

+2

환상적입니다. 내 문제를 쉽게 해결해야합니다. – Garrinn

+0

확인하고 다시 한 번 감사드립니다. – Garrinn

관련 문제