টেবিলটি সংশোধন করুন: নালকে মঞ্জুরি দেওয়ার জন্য নল থেকে 'মঞ্জুর করুন নালকে' বৈশিষ্ট্যটি কীভাবে পরিবর্তন করবেন


207

নালগুলি (নাল নয় -> নাল নয়) অনুমতি দেওয়ার জন্য টি-এসকিউএল ব্যবহার করে কোনও টেবিলে একটি বৈশিষ্ট্য কীভাবে পরিবর্তন করবেন? টেবিলের বদল হতে পারে?


12
এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও একটি সাধারণ কাজের জন্য একটি খুব জটিল স্ক্রিপ্ট তৈরি করে। এজন্য আমি বিভ্রান্ত হয়ে পড়েছি এবং স্ট্যাকওভারফ্লো পরীক্ষা করেছি। হতে পারে এটিই প্রশ্নটির মূল বিষয় ...
টিলিটো

উত্তর:


363
-- replace NVARCHAR(42) with the actual type of your column
ALTER TABLE your_table
ALTER COLUMN your_column NVARCHAR(42) NULL

4
বা ঠিক ALTER TABLE your_table ALTER COLUMN your_column NVARCHAR(42)যেমন এটি অন্যথায় স্পষ্টভাবে নির্দিষ্ট না করা থাকলেও নালীর অনুমতি দেওয়ার ক্ষেত্রে ডিফল্ট হবে।
মার্টিন স্মিথ

3
ALTER TABLE .. ALTER COLUMN ..
নালকে

2
নোট করুন এমন কিছু ক্ষেত্রে রয়েছে যেখানে এটি কাজ নাও করতে পারে - যদি আপনি পেয়ে থাকেন তবে এই ডিবিএ স্ট্যাক এক্সচেঞ্জের উত্তরটি দেখুনALTER TABLE ALTER COLUMN failed because one or more objects access this column.
জারোদ ডিকসন

49

হ্যাঁ আপনি ALTER TABLEনিম্নলিখিত হিসাবে ব্যবহার করতে পারেন :

ALTER TABLE [table name] ALTER COLUMN [column name] [data type] NULL

ALTER TABLEডকুমেন্টেশন থেকে উদ্ধৃতি :

NULLপ্রাথমিক মূল সীমাবদ্ধতার কলাম ব্যতীত নাল মানগুলিতে মঞ্জুরি দেওয়ার জন্য ALTER COLUMNএকটি NOT NULLকলামকে জোর করে নির্দিষ্ট করা যেতে পারে ।


22

টেবিলের বিকল্পটি সঠিক:

ALTER TABLE MyCustomers ALTER COLUMN CompanyName VARCHAR(20) NULL

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

@ ড্যানিয়েল ভ্যাসালো - আপনি ঠিক বলেছেন। আমি সম্পূর্ণ হওয়ার চেষ্টা করছিলাম, তবে NULL / NULL পরিবর্তন করা একমাত্র পরিবর্তন হওয়া উচিত।
ওবেদের

5

মাইএসকিউএল, মারিয়াডিবি এর জন্য

ALTER TABLE [table name] MODIFY COLUMN [column name] [data type] NULL

MODIFY COLUMNপরিবর্তে ব্যবহার করুন ALTER COLUMN


4
ALTER TABLE public.contract_termination_requests
ALTER COLUMN management_company_id DROP NOT NULL;

2
@ অরনলরিনক্জ যদিও পোস্টগ্র্রেস সম্পর্কে নয়। এটি এসকিউএল সার্ভারকে ট্যাগ করা হয়েছে যাতে এই উত্তরটি ভুল।
মার্টিন স্মিথ

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

1

আমি এটি লিখেছিলাম যাতে আমি একবারে সমস্ত টেবিল এবং কলাম সম্পাদন করতে পারি:

select 
case
when sc.max_length = '-1' and st.name in ('char','decimal','nvarchar','varchar')
then
'alter table  [' + so.name + '] alter column [' + sc.name + '] ' + st.name + '(MAX) NULL'
when st.name in ('char','decimal','nvarchar','varchar')
then
'alter table  [' + so.name + '] alter column [' + sc.name + '] ' + st.name + '(' + cast(sc.max_length as varchar(4)) + ') NULL'
else
'alter table  [' + so.name + '] alter column [' + sc.name + '] ' + st.name + ' NULL'
end as query
from sys.columns sc
inner join sys.types st on st.system_type_id = sc.system_type_id
inner join sys.objects so on so.object_id = sc.object_id
where so.type = 'U'
and st.name <> 'timestamp'
order by st.name

1

এটি করার জন্য এটিই এই পদ্ধতি: -

  1. টেবিল বা কলামটি বিদ্যমান কিনা তা পরীক্ষা করুন।
  2. যদি হ্যাঁ, তবে কলামটি পরিবর্তন করুন। উদাহরণ: -
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE 
            TABLE_CATALOG = 'DBName' AND 
            TABLE_SCHEMA = 'SchemaName' AND
            TABLE_NAME = 'TableName' AND
            COLUMN_NAME = 'ColumnName')
BEGIN
    ALTER TABLE DBName.SchemaName.TableName ALTER COLUMN ColumnName [data type] NULL
END  

আপনার যদি কোনও স্কিমা না থাকে তবে স্কিমা লাইনটি মুছুন কারণ আপনার ডিফল্ট স্কিমা দেওয়ার দরকার নেই।


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