একটি কলাম পরিবর্তন: নাল না শূন্য


1216

আমার কাছে একটি টেবিল রয়েছে যাতে বেশ কয়েকটি ছোট ছোট পূর্ণসংখ্যা কলাম রয়েছে। এটি বেশ কয়েকটি কারণে অনাকাঙ্ক্ষিত, তাই আমি সমস্ত নালকে 0 এ আপডেট করতে এবং তারপরে এই কলামগুলিকে সেট করতে দেখছি NOT NULL। নালগুলিতে পরিবর্তন ছাড়াও 0, ডেটা অবশ্যই সংরক্ষণ করতে হবে।

" " এ একটি কলাম পরিবর্তন করতে (এটি কল করুন ) পরিবর্তন করতে আমি নির্দিষ্ট এসকিউএল সিন্ট্যাক্সের সন্ধান করছি । ধরুন ডেটা নালগুলি না রাখার জন্য আপডেট করা হয়েছে।ColumnAnot null

এসকিউএল সার্ভার 2000 ব্যবহার করা হচ্ছে ।


16
অন্য একটি জিনিস - আপনাকে একটি ডিফল্ট যোগ করতে চান হতে পারে যেকোনো বিদ্যমান টিপে কলামের ব্যর্থ না উল্লেখ না: ALTER টেবিল যদি foo এডিডি বাধ্যতা FOO_Bar_Default default 0 বারের জন্য
মার্ক Gravell

4
এছাড়াও আপনি জেনে অবাক হতে পারেন যে কিছু পরিস্থিতিতে কলাম পরিবর্তন করে NOT NULLঅনেকগুলি লগইন করতে পারে।
মার্টিন স্মিথ

উত্তর:


2011

প্রথমে সমস্ত বর্তমান NULLমান অদৃশ্য করুন:

UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL

তারপরে, "NULLs" অস্বীকার করার জন্য সারণির সংজ্ঞাটি আপডেট করুন:

ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL

49
আমাকে উপরের দুটি সঠিক প্রতিক্রিয়াতে মান যোগ করতে দিন। NULL এর শব্দার্থবিজ্ঞানের কয়েকটি অর্থ হতে পারে। একটি সাধারণ অর্থ হ'ল UNKNOWN। উদাহরণ হিসাবে SCORE নিন Take একটি নাল স্কোর এবং একটি জিরো স্কোর পার্থক্যের একটি বিশ্ব! আপনি উপরোক্ত সুপারিশগুলি করার আগে। আপনার অ্যাপ্লিকেশনটি তার ব্যবসায়িক যুক্তি বাতিল করে না তা নিশ্চিত করুন।
টেকট্রাভেলথিংক

242
আপনি কোনও টাইপ তৈরি করেন এবং আপনার ডিবি বিস্ফোরিত হলে প্রথমে আপনার ডাটাবেসটিকে ব্যাকআপ করুন।
এমপেন

20
এটির বিস্ময়কর এমএস এসকিউএল ম্যানেজমেন্ট স্টুডিওটি সেই বিকল্পটিকে অনুমতি দেয় না, এটি "টপকে ড্রপিং ..." নিয়ে দম্ভ দেয়
সেবাস্তিয়ান

14
ডাটাবেসগুলি সর্বদা ব্যাক আপ করা উচিত। আপনি কখনই জানেন না কখন আপনার কোনও লোক কখন লিখিত লিখতে এবং আপডেট করতে পারে বা বিবৃতিটি মুছে ফেলতে পারে এবং যেখানে বিধিটি ভুলে যেতে পারে।
ভিভিয়ান নদী

2
@ সেবাস্তিয়ানগোডলেট: এমন একটি সেটিংস রয়েছে যা আপনাকে সেই সতর্কতা বন্ধ করতে বা এটি তৈরি করতে দেয় যাতে এটি আপনাকে টেবিলটি পরিবর্তন করতে বাধা দেয় না। কিছু ক্ষেত্রে, একটি টেবিলের স্কিমা পরিবর্তন করার জন্য একটি নতুন টেবিল তৈরি করা দরকার, পুরানো এবং পুরানো টেবিল থেকে অনুলিপি করা ডেটা বাদ দেওয়া হয়েছে। যেহেতু এই প্রক্রিয়াতে ত্রুটির ফলে ডেটা হারাতে পারে, এসএসএমএস আপনাকে সতর্ক করে এবং ডিফল্টরূপে আপনাকে এটি করতে বাধা দেয়।
স্যারাইড

57

আমার একই সমস্যা ছিল, তবে ক্ষেত্রটি শূন্য করতে ডিফল্ট হিসাবে ব্যবহৃত হত এবং এখন আমি এটি 0 এ ডিফল্ট করতে চাই That এর জন্য এমডিবির সমাধানের পরে আরও একটি লাইন যুক্ত করা দরকার:

ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];

এটি সমস্যার উত্তর দেয় না। ডিফল্ট ইতিমধ্যে সেট করা আছে, এটি নাল নয় যা পরিবর্তন করা দরকার। কেবলমাত্র আপনার উত্তর সহ, সমস্ত বিদ্যমান রেকর্ডগুলি ন্যূনাল থাকবে এবং সমস্যাটি রয়ে গেছে।
পান্ডাওড

6
আপনি "আরও একটি লাইন যুক্ত করার" অংশটি পড়েছেন? হিসাবে হিসাবে, এই উপরের উত্তর ছাড়াও?
গ্রেগ ডগার্টি

7
প্রকৃতপক্ষে, এটি স্পষ্ট নয় যে "আরও একটি লাইন যুক্ত করা" এর অর্থ "উপরের উত্তর ছাড়াও" (বিশেষত যেহেতু "উপরে" অনেকগুলি উত্তর রয়েছে) - যদি আপনি এটি বোঝাতে চান তবে শব্দটির সত্যই পরিবর্তন হওয়া দরকার এবং আপনার উচিত আপনি যে উত্তরের উল্লেখ করেছেন তার রেখাটি অন্তর্ভুক্ত করুন
পান্ডাওয়ুড

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

38

আপনাকে এটি দুটি ধাপে করতে হবে:

  1. টেবিলটি আপডেট করুন যাতে কলামে কোনও নাল থাকে না।
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
  1. কলামটির সম্পত্তি পরিবর্তন করতে টেবিলটি পরিবর্তন করুন
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL

27

ওরাকল 11 জি-র জন্য আমি কলামের বৈশিষ্ট্যটি নিম্নরূপে পরিবর্তন করতে সক্ষম হয়েছি:

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

অন্যথায় অ্যাব্যাটিকের উত্তরটি ভাল মনে হয়েছিল। আপনি পরিবর্তকের পুনরাবৃত্তি করতে পারবেন না - এটি অভিযোগ করে (কমপক্ষে এসকিউএল বিকাশকারীতে) যে কলামটি ইতিমধ্যে নাল নয়।


দেখা যাচ্ছে যে ওরাকল ১১-এ, আপনাকে এটির পুনরাবৃত্তি করতে হবে না datatype। নিছকcolumname NOT NULL যথেষ্ট। ডকুমেন্টেশন দেখুন ।
jpmc26


16

যতক্ষণ না কলামটি কোনও অনন্য সনাক্তকারী নয়

UPDATE table set columnName = 0 where columnName is null

তারপর

টেবিলটি পরিবর্তন করুন এবং ক্ষেত্রটি শূন্য স্থানে সেট করুন এবং 0 এর একটি ডিফল্ট মান নির্দিষ্ট করুন


4

এটি সহজ বলে মনে হচ্ছে তবে কেবল ওরাকলটিতে কাজ করে:

ALTER TABLE [Table] 
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;

এছাড়াও, এটির সাথে আপনি কলামগুলিও যুক্ত করতে পারেন, এটি কেবল পরিবর্তন করেন না। মানটি শূন্য হলে এই উদাহরণে এটি ডিফল্ট মান (0) এ আপডেট হয়।


হ্যাঁ, তবে গুগল এখানে লোককে নির্দেশনা দেয় .. এটি প্রচুর পরিমাণে উন্নতি লাভ করেছে এবং এর ফলে অনেকগুলি ডাউনওয়েট রয়েছে। আমি এটি দরকারী মনে করি। প্রত্যেকে এটিকে অবহেলা করতে পারে তবে আমি সত্যই চিন্তা করি এবং দেখি এটি মানুষকে সহায়তা করছে।
csomakk

দয়া করে, এসও বিধিগুলি পড়ুন। আমি কীভাবে ভাল উত্তর লিখব? , উত্তর প্রযুক্তিগত জিজ্ঞাসা সহায়তা এবং নিখুঁত প্রশ্ন লিখুন । দ্রষ্টব্য: না (প্রচন্ডভাবে অথবা সম্পাদনা) মুছে দেওয়ার ভয় বেহুদা উত্তর এবং না "উত্তর এবং চালানোর
Kiquenet

4

এর ক্ষেত্রে FOREIGN KEY CONSTRAINT... প্রাথমিক কী টেবিলের কলামে '0' উপস্থিত না থাকলে সমস্যা হবে। এর সমাধান হ'ল ...

ধাপ 1:

এই কোডটি ব্যবহার করে সমস্ত প্রতিবন্ধকতা অক্ষম করুন:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

ধাপ ২:

RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)

ধাপ 3:

এই কোডটি ব্যবহার করে সমস্ত প্রতিবন্ধকতা সক্ষম করুন:

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

4

আমার ক্ষেত্রে পোস্ট করা উত্তরগুলি নিয়ে আমার সমস্যা ছিল। আমি নিম্নলিখিত ব্যবহার করে শেষ:

ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';

পরিবর্তন করুন VARCHAR(200)আপনার ডাটাটাইপ, এবং ঐচ্ছিকরূপে ডিফল্ট মান পরিবর্তন করুন।

যদি আপনার ডিফল্ট মান না থাকে তবে আপনার এই পরিবর্তনটি করতে সমস্যা হতে চলেছে, কারণ ডিফল্ট হিসাবে একটি বিরোধ তৈরি করা বাতিল হয়ে যায়।


1

একটি উদাহরণ নেওয়া যাক:

TABLE NAME=EMPLOYEE

এবং আমি কলাম পরিবর্তন করতে চান EMPLOYEE_NAMEকরতে NOT NULL। এই ক্যোয়ারীটি কাজের জন্য ব্যবহার করা যেতে পারে:

ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;

আপনাকে আরও পঠনযোগ্য পোস্ট করার জন্য দয়া করে চিৎকার করবেন না এবং বিন্যাস ব্যবহার করবেন না। যেমন কোডের অংশটি সনাক্ত করতে সহায়তা করে। stackoverflow.com/editing-help
Yunnosch

এছাড়াও, দয়া করে সমস্ত ক্যাপগুলিতে আর দীর্ঘ পাঠ্য লিখবেন না। এটি ইন্টারনেটে চেঁচামেচি বলে বিবেচিত
জো

1
@ পাওয়ানটিওয়ারি সম্পূর্ণ সম্পাদনা করুন। আপনি পোস্টের সমস্ত সমস্যা সমাধান করবেন বলে মনে হচ্ছে না। এর বেশিরভাগই মূলধনযুক্ত।
ডাবল-বীপ

@ ডাবল-বিপ, অবশ্যই আমি তা মনে রাখব। ধন্যবাদ
পবন তিওয়ারি

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

0

জেডিকে অন্তর্ভুক্ত ইনবিল্ট জাভাডিবি-র জন্য (অ্যারাকলের আপাচি ডার্বির সমর্থিত বিতরণ) নীচে আমার জন্য কাজ করেছে

alter table [table name] alter column [column name] not null;

0

কলামটি বাতিল নয় এবং ডিফল্ট যুক্ত করা এসএসএমএস জিইউতেও করা যেতে পারে।

  1. অন্যরা ইতিমধ্যে জানিয়েছে যে, সমস্ত বিদ্যমান ডেটা "নাল নয়" না হওয়া পর্যন্ত আপনি "নাল নট" সেট করতে পারবেন না:

UPDATE myTable SET myColumn = 0

  1. কাজটি শেষ হয়ে গেলে, নকশা দৃশ্যে টেবিলটি দিয়ে (টেবিলের উপর ডান ক্লিক করুন এবং "নকশা দৃশ্যে" ক্লিক করুন), আপনি ঠিক এর মতো নলস কলামগুলি মঞ্জুর করতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

  1. এখনও নির্বাচিত কলামটির সাথে নকশার দৃষ্টিতে আপনি নীচের উইন্ডোতে কলামের বৈশিষ্ট্য দেখতে পারেন এবং সেখানে ডিফল্টটিকে 0 তে সেট করতে পারেন তেমন:

এখানে চিত্র বর্ণনা লিখুন


আমি ডাউনভোটটি দেখছি তবে আমি কোনও প্রতিক্রিয়া ছাড়াই কিছু সংশোধন করতে পারি না। যদি কিছু কাজ না করে তবে আমাকে জানান।
টনি এল।

-1

আপনি নিম্নলিখিত এসকিএল ব্যবহার করে বিদ্যমান ডিবি কলামের সংজ্ঞা পরিবর্তন করতে পারেন।

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