GUI를 사용하는 대신 코드를 작성하여 Microsoft SQL Server 2000에서 새 테이블을 만들고 있습니다. “수동 방식”으로 수행하는 방법을 배우려고합니다.
이것은 내가 실제로 사용하고있는 코드이며 잘 작동합니다.
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE())
)
이 방법으로 이름을 정의 할 수 있기 때문에 기본 키, 외래 키 및 검사 제약 조건을 자체적으로 지정했습니다. 그렇지 않으면 인라인으로 선언하면 SQL Server가 임의의 이름을 생성하고 “좋아요”하지 않습니다.
기본 값 제약 조건을 선언하려고 할 때 문제가 발생했습니다. 인터넷의 정보와 Microsoft SLQ Server Management Studio가이를 생성하는 방법을 살펴보면 인라인 및 자체적으로 생성 될 수 있음을 이해했습니다.
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
또는
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
인라인 메서드는 잘 작동하지만 일반적으로 constaint에 대한 임의의 이름을 생성하고 독립형 메서드는 오류를 발생시킵니다 Incorrect syntax near 'FOR'.
.
또한 테이블을 만든 다음 ALTER
해당 명령이 작동합니다.
ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
참고로 실행하려는 전체 코드는 다음과 같습니다.
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE()),
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
)
나는 여기서 완전히 헤매고있다. 내가하려는 것이 불가능한가, 아니면 내가 뭔가 잘못하고 있는가?
편집하다:
David M은 인라인 구문을 사용하여 명명 된 기본 제약 조건을 추가하는 방법을 보여 주었지만 독립형 구문이 완전히 잘못되었는지 아니면 내 잘못인지 이해하려고합니다.
답변
열 생성과 함께 인라인으로 수행하십시오.
[load_date] SMALLDATETIME NOT NULL
CONSTRAINT [df_load_date] DEFAULT GETDATE()
많은 독자가 QUOTED_IDENTIFIERS
기본적으로 작동하지 않으므로 따옴표 대신 대괄호를 사용 했습니다.