Tôi đang tạo một bảng mới trong Microsoft SQL server 2000 bằng cách viết mã thay vì sử dụng GUI, tôi đang cố gắng tìm hiểu cách thực hiện "theo cách thủ công".
Đây là mã tôi thực sự đang sử dụng và nó hoạt động tốt:
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())
)
Tôi đã chỉ định khóa chính, khóa ngoại và kiểm tra các ràng buộc của riêng chúng vì bằng cách này tôi có thể xác định tên cho chúng, nếu không việc khai báo chúng nội tuyến sẽ khiến SQL Server tạo ra một tên ngẫu nhiên và tôi không "thích" nó.
Vấn đề nảy sinh khi tôi cố gắng khai báo ràng buộc giá trị mặc định: xem thông tin trên internet và cách Microsoft SLQ Server Management Studio tạo nó, tôi hiểu rằng nó có thể được tạo cả nội tuyến và riêng nó:
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
hoặc là
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Phương thức nội tuyến hoạt động tốt, nhưng nó tạo ra một tên ngẫu nhiên như bình thường cho hằng số, phương thức độc lập sẽ tạo ra một lỗi Incorrect syntax near 'FOR'.
.
Ngoài ra, nếu tôi tạo bảng và sau đó ALTER
nó, lệnh sẽ hoạt động:
ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Để tham khảo, đây là mã đầy đủ mà tôi đang cố gắng thực thi:
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"
)
Tôi hoàn toàn thua thiệt ở đây, có phải điều tôi đang cố gắng không thể thực hiện được hay tôi đang làm sai điều gì đó?
Biên tập:
David M đã chỉ ra cách thêm một ràng buộc mặc định được đặt tên bằng cú pháp nội tuyến, tôi vẫn đang tìm hiểu xem cú pháp độc lập có hoàn toàn sai hay đó là lỗi của tôi.