বিদ্যমান সারণীতে একটি কলাম যুক্ত করুন এবং তাদের এমএস এসকিউএল সার্ভারে স্বতন্ত্রভাবে সংখ্যা দিন


121

আমি বিদ্যমান লিগ্যাসি ডাটাবেসে একটি কলাম যুক্ত করতে চাই এবং একটি পদ্ধতি লিখতে চাই যার মাধ্যমে আমি প্রতিটি রেকর্ডকে আলাদা আলাদা মান নির্ধারণ করতে পারি। একটি কলাম যুক্ত করার মতো এবং এর জন্য ডেটা স্বয়ংক্রিয়ভাবে তৈরি করার মতো।

পছন্দ করুন, যদি আমি "আইডি" (নম্বর) নামে একটি নতুন কলাম যুক্ত করি তবে আমি প্রতিটি রেকর্ডের একটি অনন্য মান শুরু করতে চাই। সুতরাং, আমার আইডি কলামে বলার রেকর্ড থাকবে 1 to 1000
আমি কেমন করে ঐটি করি?


2
এটি ডাটাবেস নির্দিষ্ট হতে চলেছে। আপনি কোন ডাটাবেসের সাথে কাজ করছেন তা নির্দিষ্ট করা উচিত।
ডিভোরাক

1
এটি উল্লেখ করার জন্য আপনার প্রশ্নটি সম্পাদনা করা উচিত।
ডিভোরাক

উত্তর:


221

এটি ডাটাবেসের উপর নির্ভর করবে তবে এসকিউএল সার্ভারের জন্য, এটি নিম্নলিখিত হিসাবে অর্জন করা যেতে পারে:

alter table Example
add NewColumn int identity(1,1)

5
এটি সুন্দরভাবে কাজ করেছে এবং স্বয়ংক্রিয়ভাবে আমার প্রয়োজন সমস্ত নম্বর যুক্ত করেছে। ধন্যবাদ!
jangofan

9
আপনার যদি ম্যানেজমেন্ট স্টুডিও গুইতে পরিবর্তন আনতে সমস্যা হয় তবে আপনি / সরঞ্জাম / বিকল্প / ডিজাইনার / সারণী এবং ডাটাবেস ডিজিজার এর অধীনে সেটিংস পরিবর্তন করতে পারেন আপনি সেই বাক্সটি Prevent saving changes that require table re-creationআনচেক করে একটি চেকবক্স পাবেন এবং আপনি এটি ব্যবহার করে একটি পরিচয় কলাম যুক্ত করতে সক্ষম হবেন GUI।
সার্ফমগল করুন

22

আপনি কী এসকিউএল ডাটাবেস ব্যবহার করছেন তা পোস্ট করলে এটি সহায়তা করবে। মাইএসকিউএলের জন্য আপনি সম্ভবত অটো_সংশোধন চান:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

নিশ্চিত হওয়া সত্ত্বেও এটি মান প্রয়োগ করে যদিও প্রত্যাবর্তনমূলকভাবে। যদি এটি না হয় তবে আপনার কেবলমাত্র সঞ্চিত পদ্ধতিতে বা একটি সাধারণ প্রোগ্রামে আপনার মানগুলি পুনরাবৃত্তি করতে সক্ষম হওয়া উচিত (যতক্ষণ না অন্য কেউ ডাটাবেসে লিখছেন) এবং LAST_INSERT_ID()আইডি মান উত্পন্ন করতে ফাংশনটি ব্যবহার করুন ।


7
আমি পাশাপাশি এটিও নিশ্চিত করতে পারি যে এটি সত্যই মাইএসকিউএলের জন্য কাজ করে; আমি একটি বিদ্যমান আন-ইনডেক্সড টেবিলটিতে সবেমাত্র একটি ইনক্রিমেন্টিং আইডি ফিল্ড যুক্ত করেছি এবং প্রতিটি সারিতে একটি অনন্য নতুন আইডি পেয়েছে।
ডগ কাভেন্ডেক

দুঃখিত এটি একটি পুরানো তবে এটি শিরোনামে এসকিউএল সার্ভার বলেছে।
নিক

11

ওরাকল জন্য আপনি নীচের মত কিছু করতে পারে

alter table mytable add (myfield integer);

update mytable set myfield = rownum;

8

এবং পোস্টগ্রিস সমতুল্য (আপনি যদি "আইডি" কী হতে চান তবে দ্বিতীয় লাইনটি বাধ্যতামূলক):

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);

4

কেবলমাত্র একটি বিকল্প টেবিল ব্যবহার করা উচিত। যথাযথ প্রকার এবং একটি পরিচয়ের পতাকা সহ কলামটি যুক্ত করুন এবং এটি কৌশলটি করা উচিত

এই এমএসডিএন নিবন্ধটি ALTER TABLE সিনট্যাক্সে http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx দেখুন


3

SQL সার্ভারে UNIQUEIDENTIFIER ডেটাটাইপের জন্য এটি ব্যবহার করে দেখুন

Alter table table_name
add ID UNIQUEIDENTIFIER not null unique default(newid())

আপনি যদি এই কলামটি থেকে প্রাথমিক কী তৈরি করতে চান তবে এটি ব্যবহার করুন

ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);

0

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


0

আপনি যদি নিজের নতুন কলামটি টাইপের IDENTITY(অটো-ইনক্রিমেন্ট) আকারে না চান বা আপনি যে সারিগুলি সারণি অনুসারে সাজিয়েছেন সে সম্পর্কে আপনি সুনির্দিষ্ট হতে চান, আপনি টাইপের একটি কলাম যুক্ত করতে পারেন INT NULLএবং এরপরে এটি পপুলেট করতে পারেন। আমার উদাহরণে, নতুন কলামটিকে মাইনিউইউ কলাম বলা হয় এবং টেবিলের জন্য বিদ্যমান প্রাথমিক কী কলামটি মাইপ্রিমারিকে বলে।

UPDATE MyTable
SET MyTable.MyNewColumn = AutoTable.AutoNum
FROM
(
    SELECT MyPrimaryKey, 
    ROW_NUMBER() OVER (ORDER BY SomeColumn, SomeOtherColumn) AS AutoNum
    FROM MyTable 
) AutoTable
WHERE MyTable.MyPrimaryKey = AutoTable.MyPrimaryKey  

এটি এসকিউএল সেভার 2005 এবং তার পরে কাজ করে, অর্থাত্ সংস্করণগুলি ROW_NUMBER()

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