GUI kullanmak yerine kodu yazarak Microsoft SQL server 2000'de yeni bir tablo oluşturuyorum, bunu "manuel yolla" nasıl yapacağımı öğrenmeye çalışıyorum.
Aslında kullandığım kod bu ve iyi çalışıyor:
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())
)
Birincil anahtarı, yabancı anahtarı ve kontrol kısıtlamalarını kendi başlarına belirledim çünkü bu şekilde onlar için bir ad tanımlayabilirim, aksi takdirde bunları satır içi olarak bildirmek SQL Server'ın rastgele bir ad oluşturmasına neden olur ve bunu "beğenmem".
Varsayılan değer kısıtlamasını bildirmeye çalıştığımda sorun ortaya çıktı: İnternetteki bilgilere ve Microsoft SLQ Server Management Studio'nun bunu nasıl oluşturduğuna baktığımda, hem satır içi hem de kendi başına oluşturulabileceğini anladım:
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
veya
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Satır içi yöntem iyi çalışıyor, ancak her zamanki gibi sabit için rastgele bir ad oluşturuyor, bağımsız yöntem bir hata veriyor diyerek Incorrect syntax near 'FOR'.
.
Ayrıca, tabloyu oluşturursam ve sonra ALTER
bu komut çalışır:
ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Referans olarak, çalıştırmaya çalıştığım kodun tamamı:
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"
)
Burada tamamen kayboldum, yapmaya çalıştığım şey mümkün değil mi yoksa yanlış bir şey mi yapıyorum?
Düzenle:
David M, satır içi sözdizimini kullanarak adlandırılmış bir varsayılan kısıtlamanın nasıl ekleneceğini gösterdi, hala bağımsız sözdiziminin tamamen yanlış mı yoksa benim hatam mı olduğunu anlamaya çalışıyorum.