SORU
23 Kasım 2009, PAZARTESİ


Bir tablo oluştururken varsayılan kısıtlama ilan

Kodu yazmak yerine, GUI kullanarak Microsoft SQL server 2000'de yeni bir tablo yaratıyorum, nasıl yapılacağını öğrenmek için çalışıyorum "manuel".

Bu aslında kullanıyorum kodudur, ve gayet 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())
)

Ben belirtilen birincil anahtar, yabancı anahtar ve check kısıtlamaları kendi çünkü bu yaptığım tanımlamak için bir ad onlara, aksi takdirde ilan bunları satır olurdu SQL Server oluşturmak rastgele bir isim, ve ben "gibi".

Sorun ortaya çıktığında denedim bildirmek için varsayılan değer kısıtlaması: bakıyor bilgilerin internet ve Microsoft SLQ Server Management Studio oluşturur, anladım ki oluşturulabilir iki satır içinde ve kendi kendine:

"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()

ya

CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"

Satır içi yöntemi gayet iyi çalışıyor, ama her zamanki gibi constaint için rasgele bir ad oluşturur, tek başına bu yöntem bir hata, Incorrect syntax near 'FOR'. diyerek atar.

Tablo oluşturmak ve daha sonra 10 ** ayrıca, komut çalışır:

ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"

< / ^ br . Bir referans olarak, burada çalıştırmak için çalışıyorum tam kodu

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"
)

< / ^ br . < / ^ br . Mümkün değil yapmaya çalıştığım şey tamamen kayıp buradayım, ya yanlış bir şey yapıyorum?

Şimdiden teşekkürler, Andrea.

< / ^ br . < / ^ br . Düzenleme:

David M adlı varsayılan kısıtlama içi sözdizimini kullanarak eklemek için nasıl, hala eğer tek başına olmadığını anlamak için arıyorum sözdizimi tamamen yanlış ya da benim suçum olduğunu gösterdi.

CEVAP
23 Kasım 2009, PAZARTESİ


Sütun oluşturma ile satır içi yapın:

[load_date] SMALLDATETIME NOT NULL
        CONSTRAINT [df_load_date] DEFAULT GETDATE()

Birçok okuyucu varsayılan olarak QUOTED_IDENTIFIERS işe yaramaz gibi tırnak işaretleri yerine köşeli parantez kullandık.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kalabrandmusic

    kalabrandmus

    25 Kasım 2009
  • MaximumPCMag

    MaximumPCMag

    23 Temmuz 2010
  • SRI International

    SRI Internat

    30 NİSAN 2008