मैं 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 सर्वर एक यादृच्छिक नाम उत्पन्न करेगा, और मैं इसे "पसंद नहीं" करता हूं।
समस्या तब पैदा हुई जब मैंने डिफ़ॉल्ट मूल्य की कमी की घोषणा करने की कोशिश की: इंटरनेट पर informations को देखते हुए और Microsoft SLQ सर्वर प्रबंधन स्टूडियो इसे कैसे बनाता है, मुझे समझ में आया कि यह इनलाइन और अपने दम पर बनाया जा सकता है:
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
या
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
इनलाइन विधि ठीक काम करती है, लेकिन यह हमेशा की तरह एक यादृच्छिक नाम उत्पन्न करता है, स्टैंड अलोन विधि एक त्रुटि कहती है 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"
)
मैं यहां पूरी तरह से नुकसान में हूं, क्या मैं संभव नहीं करने की कोशिश कर रहा हूं, या मैं कुछ गलत कर रहा हूं?
संपादित करें:
डेविड एम ने दिखाया कि इनलाइन सिंटैक्स का उपयोग करके एक नामांकित डिफ़ॉल्ट बाधा को कैसे जोड़ा जाए, मैं अभी भी यह समझने की कोशिश कर रहा हूं कि क्या स्टैंड अलोन सिंटैक्स पूरी तरह से गलत है या यह मेरी गलती है।