স্কোয়েন্স নম্বর / চর বা কোনও অনন্য ডেটা সহ বিদ্যমান সারিগুলি আপডেট করুন


13

আমি টেবিল এক্সে একটি নতুন কলাম যুক্ত করেছি

এই কলামটি "সিএন" অনন্য এবং বাধ্যতামূলক হতে হবে, তবে পুরানো ডেটার কোনও মূল্য নেই।

পৃথক বা এলোমেলো অনন্য ডেটা দিয়ে কীভাবে বিদ্যমান রেকর্ডগুলি আপডেট করবেন?

ধন্যবাদ.

উত্তর:


11

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


আপনি এটি কীভাবে মূল্যবোধকে জনসাধারণের সাথে যুক্ত করার উপর নির্ভর করে।

আপনি যে কোনও পদ্ধতি ব্যবহার করার পরে ডেটা অখণ্ডতা নিশ্চিত করতে কলামে একটি অনন্য বাধা যুক্ত করুন। পদ্ধতি 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বস্তুর দ্বারা উত্পন্ন মানগুলি ব্যবহার করে একটি কলাম তৈরি করতে পারেন - আমি এখনও এটি নিয়ে কাজ করি নি, তাই সম্পূর্ণতার জন্য আমি একটি এমএসডিএন নিবন্ধটি উল্লেখ করব ।


আপনাকে সবাইকে ধন্যবাদ, আমি প্রথম উত্তরটির সংমিশ্রণ সহ 3 পদ্ধতিটি ব্যবহার করেছি: আপডেট টি সেট সিএন = আরএন থেকে (সিএন, সারি_নম্বার (ওভার (অর্ডার (1 নির্বাচন করুন) দ্বারা টেবিলএক্স থেকে আরএন হিসাবে নির্বাচন করুন) টি
মেড_লপা

সিক্যুয়েন্স ব্যবহারের উদাহরণ (ধরে নেওয়া আপনার মাইক্রোয়েন্স নামক একটি ক্রম রয়েছে):update mytable set mycolumn = next value for mysequence where mycolumn is null;
এন্ডি

14

আপনি যদি 1 থেকে শুরু করে কোনও সংখ্যা নিয়ে খুশি হন তবে আপনি ব্যবহার করতে পারেন row_number()

update T
set cn = rn
from (
       select cn,
              row_number() over(order by (select 1)) as rn
       from TableX
     ) T


0

সিকোয়েন্স ব্যবহার করে আপডেট করার জন্য এটি ব্যবহার করে দেখুন ... আপডেটের বিবৃতিতে ধারা দ্বারা আদেশের কারণে আপনাকে শীর্ষস্থানীয় করতে হবে। আমি এসকিউএল সার্ভার 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)

-1

এবং যদি এগুলি এখনও কাজ করে না (সম্ভবত এটি পুরাতন এসকিউএল -৯২ এর কারণ), আপনি এখানে জিগি ক্রুইলটিফ্রি জিতজিস্টারের পরামর্শ অনুসারে এটিকে একাধিক পদক্ষেপে বিভক্ত করতে পারেন ।

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 স্ট্যান্ডার্ডে নেই।
ypercubeᵀᴹ

হ্যাঁ আপনি ঠিক. রেকর্ডনবার হ'ল একটি গণনা করা কলাম যা আপনি ফাইলমেকারে সংজ্ঞায়িত করতে পারেন, এটি প্রতিটি সারি রেকর্ড নম্বর ধারণ করে যখন এটি স্ক্রিনে প্রদর্শিত হয় এবং এটি বাছাইয়ের পরে (ফাইলমেকার দ্বারা)।
গ্যারি সিজিচি

ঠিক আছে, ভাল, এটি জানতেন না। তবে এখানে প্রশ্নটি ট্যাগ করা হয়নি Filemakerতাই আমি উত্তরটি প্রাসঙ্গিক বলে মনে করি না। আপনি একটি টেম্প টেবিল ব্যবহার করতে পারেন এবং ROW_NUMBER()যদিও ফাংশন দিয়ে সেই কলামটি পূরণ করতে পারেন ।
ypercubeᵀᴹ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.