ฉันกำลังสร้างตารางใหม่ใน Microsoft SQL Server 2000 โดยเขียนโค้ดแทนการใช้ GUI ฉันกำลังพยายามเรียนรู้วิธีการทำ "วิธีการด้วยตนเอง"
นี่คือรหัสที่ฉันใช้จริงและใช้งานได้ดี:
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 แสดงวิธีเพิ่มข้อ จำกัด เริ่มต้นที่มีชื่อโดยใช้ไวยากรณ์แบบอินไลน์ฉันยังคงต้องการทำความเข้าใจว่าไวยากรณ์แบบสแตนด์อะโลนนั้นผิดทั้งหมดหรือเป็นความผิดของฉัน