এসকিউএল সিনট্যাক্স ব্যবহার করে কীভাবে আমি একটি প্রাথমিক কী বাধা পরিবর্তন করতে পারি?


100

আমার কাছে একটি টেবিল রয়েছে যা এর প্রাথমিক কী সীমাবদ্ধতায় একটি কলাম অনুপস্থিত। এটি এসকিউএল সার্ভারের মাধ্যমে সম্পাদনা করার পরিবর্তে, এটি আমাদের আপডেট স্ক্রিপ্টগুলির অংশ হিসাবে এটি যুক্ত করতে একটি স্ক্রিপ্টে রাখতে চাই।

এটি করার জন্য আমি কোন বাক্য গঠন ব্যবহার করতে পারি? আমি কি কী বাধাটি ড্রপ করে আবার তৈরি করব?


5
আফাইক হ্যাঁ, আপনাকে পিকে সীমাবদ্ধতা ফেলে এবং পুনরায় তৈরি করতে হবে। ইতিমধ্যে বিদ্যমান PK / FK সীমাবদ্ধতায় একটি কলাম যুক্ত করার জন্য আমি কোনও কমান্ড স্মরণ করি না।
Seramme

উত্তর:


149

হ্যাঁ. একমাত্র উপায় হ'ল একটি পরিবর্তন টেবিল দিয়ে সীমাবদ্ধতা ফেলে তারপর এটি পুনরায় তৈরি করুন।

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)

11
যদি আপনি প্রাথমিক কী বাধাটির নামটি না জানেন তবে এটি সন্ধানের জন্য এখানে পাওয়া ক্যোয়ারীটি ব্যবহার করুন (বা একবারে দেখুন এবং একবারে সমস্ত ড্রপ করুন)। http://stackoverflow.com/a/13948609/945875
জাস্টিন

যদি এটি স্পষ্ট না হয়, বা অন্য কেউ একই ভুল করে থাকে তবে সীমাবদ্ধতার নামটি উদ্ধৃতিতে যেতে পারে না alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187এখানে কাজ করছে
মাসলো

1
আপনারা যারা, এই সীমাবদ্ধতার নাম জানেন না: ALTER TABLE dbtable প্রাথমিক কী ড্রপ করুন, প্রাথমিক কী যুক্ত করুন ( id1, id2);
karsten314159

20

PRIMARY KEY CONSTRAINTপরিবর্তন করা যাবে না, আপনি কেবল এটিকে ফেলে দিয়ে আবার তৈরি করতে পারেন। বড় ডেটাসেটগুলির জন্য এটি দীর্ঘ সময়ের জন্য কারণ হতে পারে এবং টেবিলের অযোগ্যতা।


3

পারফরম্যান্স অনুযায়ী এই সময়ে নন ক্লাস্টারযুক্ত সূচি রাখার কোনও অর্থ নেই কারণ তারা ড্রপ এবং তৈরির ক্ষেত্রে পুনরায় আপডেট হবে। যদি এটি একটি বড় ডেটা সেট হয়ে থাকে তবে আপনি টেবিলটির নাম পরিবর্তন করতে হবে (যদি সম্ভব হয় তবে এর কোনও সুরক্ষা সেটিংস?), সঠিক কীগুলির সাহায্যে খালি টেবিলটি পুনরায় তৈরি করে সেখানে সমস্ত ডেটা মাইগ্রেট করতে হবে। আপনার এটির জন্য পর্যাপ্ত জায়গা রয়েছে তা নিশ্চিত করতে হবে।


1

আমার ক্ষেত্রে, আমি একটি প্রাথমিক কীতে (কলাম 4) একটি কলাম যুক্ত করতে চাই। আমি এই স্ক্রিপ্টটি কলাম 4 যুক্ত করতে ব্যবহার করেছি

ALTER TABLE TableA
DROP CONSTRAINT [PK_TableA]

ALTER TABLE TableA
ADD CONSTRAINT [PK_TableA] PRIMARY KEY (
    [column1] ASC,
    [column2] ASC, 
    [column3] ASC,
    [column4] ASC
)

-4

আপনি sp_rename ব্যবহার করে সীমাবদ্ধ বস্তুর নাম পরিবর্তন করতে পারেন ( এই উত্তরে বর্ণিত হিসাবে )

উদাহরণ স্বরূপ:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint'

3
প্রশ্নটি ছিল কীভাবে প্রতিবন্ধকতা পরিবর্তন করবেন, অর্থাৎ একটি কলাম এডিডি করুন, কীভাবে নাম পরিবর্তন করবেন না।
অ্যান্ড্রু স্টিৎজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.