উত্তর:
যদিও আমি মনে করি আপনি ইতিমধ্যে কলামটি তৈরি করেছেন, এই উত্তরে আমি এই ধারণাটি নিয়ে চলেছি যে কলামটি এখনও বিদ্যমান নেই। আইএমও, কীভাবে বিদ্যমান সারিগুলিকে প্রথমে পপুলেটিং করা যায় তা পরিকল্পনা না করে কোনও অনন্য প্রয়োজনীয় কলাম কখনই যুক্ত করা উচিত নয় । সুতরাং, আমি শূন্য থেকে এটি শুরু করার পদ্ধতিগুলি সরবরাহ করব।
আপনি এটি কীভাবে মূল্যবোধকে জনসাধারণের সাথে যুক্ত করার উপর নির্ভর করে।
আপনি যে কোনও পদ্ধতি ব্যবহার করার পরে ডেটা অখণ্ডতা নিশ্চিত করতে কলামে একটি অনন্য বাধা যুক্ত করুন। পদ্ধতি 1 এবং 2 এর জন্য, এটি একক বিবৃতিতে বা ব্যবহারকারীর লেনদেনের মধ্যে (প্রদর্শিত হয় না) করা যেতে পারে এবং পদ্ধতি 3-তে ব্যবহারকারীর লেনদেনের মধ্যেই করা উচিত।
এটি করার সম্ভবত আরও কয়েকটি অস্পষ্ট উপায় রয়েছে তবে আমি মনে করি আমি খুব সাধারণ বিষয়টিকে আবৃত করেছি।
পদ্ধতি 1: একটি পরিচয় কলাম যুক্ত করুন
ALTER TABLE MyTable ADD MyColumn int IDENTITY(1, 2) NOT NULL
এটি বীজের মান (1) দিয়ে শুরু করে পূর্ণসংখ্যার মানগুলির সাথে সারিগুলিতে সমস্ত সারি তৈরি করবে, প্রতিটি সারির জন্য বৃদ্ধি মান (2) দ্বারা বৃদ্ধি পাবে। আমি বিশ্বাস করি যে মানগুলি জনবহুল হয় সেই আদেশটি অপরিজ্ঞাত (যদি আপনার কোনও অর্ডার নির্দিষ্ট করতে হয় তবে পদ্ধতি 3 ব্যবহার করুন)।
পদ্ধতি 2: একটি ডিফল্ট সীমাবদ্ধতা ব্যবহার করে পপুলেট করুন
ALTER TABLE MyTable ADD MyColumn uniqueidentifier NOT NULL
CONSTRAINT DF_MyTable_MyColumn
DEFAULT (NEWSEQUENTIALID())
এটি পরমাণুগতভাবে তিনটি কাজ করবে: ১. কলাম যুক্ত করুন যা NULL
মানকে অনুমতি দেয় না ; 2. কলামের জন্য একটি ডিফল্ট সীমাবদ্ধতা তৈরি করুন; ৩. ডিফল্ট সীমাবদ্ধতা ব্যবহার করে টেবিলের প্রতিটি সারি স্থাপন করুন।
এই উদাহরণটি uniqueidentifier
কলাম ব্যবহার করার সময় এটি কোনও ডেটা টাইপ এবং ডিফল্ট সীমাবদ্ধতার সাথে কাজ করে।
পদ্ধতি 3: একটি আপডেটের বিবৃতি ব্যবহার করে পপুলেট করুন
এই কেসটি ঘটবে যখন, উদাহরণস্বরূপ, আপনার আবেদনের অন্য অংশের একটি মান রয়েছে যা টেবিলে যুক্ত করা দরকার, বা আপনাকে অনন্য মানের জন্য একটি সঠিক ক্রম নির্দিষ্ট করতে হবে।
BEGIN TRANSACTION
ALTER TABLE MyTable ADD MyColumn int NULL
UPDATE MyTable
SET MyColumn = ...
ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL
COMMIT TRANSACTION
পদ্ধতি 4: একটি SEQUENCE অবজেক্ট ব্যবহার করে পপুলেট করুন
এসকিউএল সার্ভার ২০১২-এর জন্য, আপনি কোনও SEQUENCE
বস্তুর দ্বারা উত্পন্ন মানগুলি ব্যবহার করে একটি কলাম তৈরি করতে পারেন - আমি এখনও এটি নিয়ে কাজ করি নি, তাই সম্পূর্ণতার জন্য আমি একটি এমএসডিএন নিবন্ধটি উল্লেখ করব ।
update mytable set mycolumn = next value for mysequence where mycolumn is null;
আপনি যদি 1 থেকে শুরু করে কোনও সংখ্যা নিয়ে খুশি হন তবে আপনি ব্যবহার করতে পারেন row_number()
।
update T
set cn = rn
from (
select cn,
row_number() over(order by (select 1)) as rn
from TableX
) T
নিম্নলিখিত আপডেটগুলি কলাম 'সিএন' ক্রম নম্বর সহ 1 থেকে শুরু হচ্ছে
DECLARE @id INT
SET @id = 0
UPDATE X
SET @id = cn = @id + 1
GO
সিকোয়েন্স ব্যবহার করে আপডেট করার জন্য এটি ব্যবহার করে দেখুন ... আপডেটের বিবৃতিতে ধারা দ্বারা আদেশের কারণে আপনাকে শীর্ষস্থানীয় করতে হবে। আমি এসকিউএল সার্ভার 2012 এ এই বিবৃতিটি ব্যবহার করেছি
update invoice set RecNo = (next value for seq_invoice_recno)
where invoiceid in (select top 100000 invoiceid from invoice where RecNo is null
order by invoiceId)
এবং যদি এগুলি এখনও কাজ করে না (সম্ভবত এটি পুরাতন এসকিউএল -৯২ এর কারণ), আপনি এখানে জিগি ক্রুইলটিফ্রি জিতজিস্টারের পরামর্শ অনুসারে এটিকে একাধিক পদক্ষেপে বিভক্ত করতে পারেন ।
CREATE TABLE sorting (sid numeric(10,10), rn int);
INSERT INTO sorting (sid, rn)
SELECT SortID, RecordNumber FROM Beleg
WHERE Year ( Valuta ) = 2016
AND Ursprungskonto = 1210
ORDER BY SortID;
UPDATE Beleg SET SortID = (SELECT rn FROM sorting WHERE sid=Beleg.SortID)
WHERE Year ( Valuta ) = 2016
AND Ursprungskonto = 1210;
DROP TABLE sorting;
RecordNumber
? মালিকানার ফাইলমেকার ফাংশন / বৈশিষ্ট্যের মতো মনে হচ্ছে। এসকিউএল সার্ভারে প্রযোজ্য নয় এবং এসকিউএল 92 স্ট্যান্ডার্ডে নেই।
Filemaker
তাই আমি উত্তরটি প্রাসঙ্গিক বলে মনে করি না। আপনি একটি টেম্প টেবিল ব্যবহার করতে পারেন এবং ROW_NUMBER()
যদিও ফাংশন দিয়ে সেই কলামটি পূরণ করতে পারেন ।