আমি জিইউআই ব্যবহার করার পরিবর্তে কোড লিখে মাইক্রোসফ্ট এসকিউএল সার্ভার 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())
)
আমি প্রাথমিক কী, বিদেশী কী এবং চেক সীমাবদ্ধতাগুলি তাদের নিজস্ব হিসাবে নির্দিষ্ট করেছি কারণ এইভাবে আমি তাদের জন্য একটি নাম সংজ্ঞায়িত করতে পারি, অন্যথায় তাদেরকে ইনলাইন ঘোষণার ফলে এসকিউএল সার্ভারটি একটি এলোমেলো নাম জেনারেট করে এবং আমি এটি "পছন্দ করি না"।
আমি যখন ডিফল্ট মান সীমাবদ্ধতা ঘোষণার চেষ্টা করেছি তখন সমস্যাটি দেখা দিয়েছে: ইন্টারনেটে তথ্য এবং মাইক্রোসফ্ট এসএলকিউ সার্ভার ম্যানেজমেন্ট স্টুডিও এটি কীভাবে তৈরি করে তা দেখে আমি বুঝতে পেরেছিলাম যে এটি ইনলাইন এবং নিজস্বভাবে তৈরি করা যেতে পারে:
"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"
)
আমি এখানে পুরোপুরি লোকসানে আছি, যা আমি সম্ভব না করার চেষ্টা করছি, বা আমি কিছু ভুল করছি?
সম্পাদনা করুন:
ডেভিড এম কীভাবে ইনলাইন সিনট্যাক্স ব্যবহার করে একটি নামযুক্ত ডিফল্ট সীমাবদ্ধতা যুক্ত করবেন তা দেখিয়েছি, আমি এখনও বুঝতে চাইছি যে স্ট্যান্ড একা সিনট্যাক্সটি সম্পূর্ণ ভুল বা এটি আমার দোষ is