SQL সার্ভারে একটি বিদ্যমান সারণিতে একটি ডিফল্ট মান সহ একটি কলাম যোগ করুন




sql-server sql-server-2005 (20)

একটি ডিফল্ট মান সহ একটি কলাম SQL সার্ভার 2000 / SQL সার্ভার 2005 একটি বিদ্যমান সারণিতে যোগ করা যাবে কিভাবে?


বাক্য গঠন:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

উদাহরণ:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

নোট:

ঐচ্ছিক সীমাবদ্ধতা নাম:
যদি আপনি CONSTRAINT D_SomeTable_SomeCol ছেড়ে যান তবে SQL সার্ভারটি স্বয়ংক্রিয়ভাবে তৈরি হবে
একটি মজার নাম দিয়ে ডিফল্ট- DF__SomeTa__SomeC__4FB7FEF6 নাম: DF__SomeTa__SomeC__4FB7FEF6

ঐচ্ছিক সহ-মূল্য বিবৃতি:
যখন আপনার কলামটি বাতিল হয় তখন মূল্যগুলির WITH VALUES কেবলমাত্র প্রয়োজন হয়
এবং আপনি ডিফল্ট মান বিদ্যমান রেকর্ডের জন্য ব্যবহার করতে চান।
আপনার কলাম NOT NULL , এটি স্বয়ংক্রিয়ভাবে ডিফল্ট মান ব্যবহার করবে
সমস্ত বিদ্যমান রেকর্ডের জন্য, আপনি মূল্য WITH VALUES নির্দিষ্ট কিনা বা না।

কিভাবে একটি ডিফল্ট-সংযম সঙ্গে কাজ সন্নিবেশ করান:
যদি আপনি SomeTable একটি রেকর্ড সন্নিবেশ করেন এবং SomeTable এর মান উল্লেখ না করেন তবে এটি 0 থেকে ডিফল্ট হবে।
যদি আপনি একটি রেকর্ড সন্নিবেশ করান এবং NULL হিসাবে এবং SomeCol এর মান উল্লেখ করুন (এবং আপনার কলাম SomeCol অনুমোদন করে)
তারপর ডিফল্ট-সীমাবদ্ধতা ব্যবহার করা হবে না এবং NULL মান হিসাবে সন্নিবেশ করা হবে।

নোট নীচের প্রত্যেকের মহান মতামত উপর ভিত্তি করে ছিল।
বিশেষ ধন্যবাদ:
@ ইয়্যাট্রিক্স, @ ওয়াল্টারস্টাবোস, @ ইয়াহু সিরিয়াস, এবং @ স্ট্যাকম্যান তাদের মন্তব্যের জন্য।


SQL সার্ভার 2008-R2 এ, আমি নকশা মোডে গিয়েছি - একটি পরীক্ষামূলক ডাটাবেসে - এবং ডিজাইনার ব্যবহার করে আমার দুটি কলাম যোগ করে এবং GUI এর সাথে সেটিংস তৈরি করে এবং তারপর কুখ্যাত রাইট ক্লিক ক্লিক করে " জেনারেট চেঞ্জ স্ক্রিপ্ট " বিকল্পটি দেয়। !

Bang আপ দিয়ে একটি ছোট উইন্ডো পপ করে, আপনি এটি অনুমান করেছেন, সঠিকভাবে বিন্যাসিত গ্যারান্টি-টু-ওয়ার্ক পরিবর্তন স্ক্রিপ্ট। সহজ বাটন আঘাত।


আচ্ছা, এখন আমার আগের উত্তরটিতে কিছু পরিবর্তন আছে। আমি লক্ষ্য করেছি যে উত্তরগুলির কোনও উল্লেখ নেই IF NOT EXISTS । সুতরাং আমি এটির একটি নতুন সমাধান সরবরাহ করতে যাচ্ছি কারণ টেবিলের পরিবর্তন কিছু সমস্যা হয়েছে।

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient')
BEGIN
ALTER TABLE dbo.TaskSheet ADD
 IsBilledToClient bit NOT NULL DEFAULT ((1))
END
GO

এখানে TaskSheet বিশেষ টেবিল নাম এবং IsBilledToClient হল নতুন কলাম যা আপনি ঢোকাতে যাচ্ছেন এবং 1 ডিফল্ট মান। তার মানে নতুন কলামে বিদ্যমান সারির মান কত হবে, তাই এটি স্বয়ংক্রিয়ভাবে সেখানে সেট করা হবে। যাইহোক, আপনি কলামের BIT আপনার BIT পরিবর্তন করতে পারেন যেমন আমি BIT ব্যবহার করেছি, তাই আমি ডিফল্ট মান 1 রাখি।

আমি উপরে সিস্টেম সুপারিশ, কারণ আমি একটি সমস্যা সম্মুখীন হয়েছে। তাহলে সমস্যাটা কি? সমস্যাটি হল, যদি IsBilledToClient কলামটি টেবিল টেবিলের মধ্যে বিদ্যমান থাকে তবে আপনি যদি নীচের IsBilledToClient অংশটি শুধুমাত্র কার্যকর করেন তবে আপনি SQL সার্ভার কোয়েরি বিল্ডারে একটি ত্রুটি দেখতে পাবেন। কিন্তু যদি এটি বিদ্যমান না হয় তবে নির্বাহ করার সময় প্রথমবারের মতো কোন ত্রুটি হবে না।

ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]

আপনি নিম্নলিখিত উপায়ে টি-এসকিউএল দিয়ে জিনিস করতে পারেন।

 ALTER TABLE {TABLENAME}
 ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
 CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

পাশাপাশি আপনি ডিজাইন মেনুতে ডানে ক্লিক টেবিলের মাধ্যমে SQL সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করতে পারেন, টেবিলে ডিফল্ট মান সেট করছেন।

এবং আরও, যদি আপনি ডাটাবেসের সকল সারণিতে একই কলাম (যদি এটি বিদ্যমান না থাকে) যোগ করতে চান তবে ব্যবহার করুন:

 USE AdventureWorks;
 EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;

আপনি যে কলামটি যুক্ত করছেন সেটি যখন কোনও NOT NULL সীমাবদ্ধতা থাকে তখন সাবধান থাকুন, তবে এতে কোনও বিধিনিষেধ নেই (মান)। যদি টেবিলে কোন সারি থাকে তবে ALTER TABLE বিবৃতিটি সেই ক্ষেত্রে ব্যর্থ হবে। সমাধানটি নতুন কলাম থেকে NOT NULL সীমাবদ্ধতা সরাতে হয় NOT NULL বা এটির জন্য DEFAULT সীমাবদ্ধতা সরবরাহ করে।


উদাহরণ:

ALTER TABLE [Employees] ADD Seniority int not null default 0 GO

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

ALTER TABLE {schemaName}.{tableName}
    ADD {columnName} {datatype} NULL
    CONSTRAINT {constraintName} DEFAULT {DefaultValue}

UPDATE {schemaName}.{tableName}
    SET {columnName} = {DefaultValue}
    WHERE {columName} IS NULL

ALTER TABLE {schemaName}.{tableName}
    ALTER COLUMN {columnName} {datatype} NOT NULL

এইটি কী করবে একটি কলামযোগ্য ক্ষেত্র হিসাবে এবং ডিফল্ট মান সহ কলামটি ডিফল্ট মানতে আপডেট করুন (অথবা আপনি আরো অর্থপূর্ণ মান নির্ধারণ করতে পারেন), এবং অবশেষে এটি কলামটি নুল হতে পরিবর্তন করবে না।

এর কারণ হল যদি আপনি একটি বড় স্কেল টেবিল আপডেট করেন এবং একটি নতুন নাল ক্ষেত্র যোগ করেন তবে এটি প্রতিটি একক সারিতে লিখতে হবে এবং এর ফলে পুরো টেবিলে লক হয়ে যাবে কারণ এটি কলাম যোগ করে এবং তারপর সমস্ত মান লিখতে পারে।

এই পদ্ধতিটি নালযোগ্য কলাম যোগ করবে যা নিজের দ্বারা খুব দ্রুত পরিচালনা করে, তারপর নল স্থিতি সেট করার আগে তথ্যটি পূরণ করে।

আমি দেখেছি যে এক বিবৃতিতে সমগ্র জিনিসটি 4-8 মিনিটের জন্য আমাদের আরও সক্রিয় টেবিলগুলির মধ্যে একটি লক করে এবং প্রায়শই আমি প্রক্রিয়াটিকে হত্যা করেছি। এই পদ্ধতিটি সাধারণত প্রতিটি অংশে মাত্র কয়েক সেকেন্ড সময় লাগে এবং সর্বনিম্ন লকিংয়ের কারণ হয়।

অতিরিক্তভাবে, যদি আপনার কোটি কোটি সারি এলাকায় একটি টেবিল থাকে তবে এটি আপডেটের মতো বাচানোর যোগ্য হতে পারে:

WHILE 1=1
BEGIN
    UPDATE TOP (1000000) {schemaName}.{tableName}
        SET {columnName} = {DefaultValue}
        WHERE {columName} IS NULL

    IF @@ROWCOUNT < 1000000
        BREAK;
END

এই নীচের কোড দ্বারা সম্পন্ন করা যেতে পারে।

CREATE TABLE TestTable
    (FirstCol INT NOT NULL)
    GO
    ------------------------------
    -- Option 1
    ------------------------------
    -- Adding New Column
    ALTER TABLE TestTable
    ADD SecondCol INT
    GO
    -- Updating it with Default
    UPDATE TestTable
    SET SecondCol = 0
    GO
    -- Alter
    ALTER TABLE TestTable
    ALTER COLUMN SecondCol INT NOT NULL
    GO

একটি টেবিলে একটি নতুন কলাম যোগ করুন:

ALTER TABLE [table]
ADD Column1 Datatype

উদাহরণ স্বরূপ,

ALTER TABLE [test]
ADD ID Int

যদি ব্যবহারকারী এটি স্বয়ংক্রিয়ভাবে বৃদ্ধি করতে চায় তবে:

ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL

একটি ডিফল্ট মান সহ একটি বিদ্যমান ডাটাবেস টেবিলে একটি কলাম যোগ করতে, আমরা ব্যবহার করতে পারি:

ALTER TABLE [dbo.table_name]
    ADD [Column_Name] BIT NOT NULL
Default ( 0 )

একটি ডিফল্ট মান সহ একটি বিদ্যমান ডাটাবেস টেবিলের কলাম যুক্ত করার আরেকটি উপায় এখানে।

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

-------------------------------------------------------------------------
-- Drop COLUMN
-- Name of Column: Column_EmployeeName
-- Name of Table: table_Emplyee
--------------------------------------------------------------------------
IF EXISTS (
            SELECT 1
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME = 'table_Emplyee'
              AND COLUMN_NAME = 'Column_EmployeeName'
           )
    BEGIN

        IF EXISTS ( SELECT 1
                    FROM sys.default_constraints
                    WHERE object_id = OBJECT_ID('[dbo].[DF_table_Emplyee_Column_EmployeeName]')
                      AND parent_object_id = OBJECT_ID('[dbo].[table_Emplyee]')
                  )
            BEGIN
                ------  DROP Contraint

                ALTER TABLE [dbo].[table_Emplyee] DROP CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]
            PRINT '[DF_table_Emplyee_Column_EmployeeName] was dropped'
            END
     --    -----   DROP Column   -----------------------------------------------------------------
        ALTER TABLE [dbo].table_Emplyee
            DROP COLUMN Column_EmployeeName
        PRINT 'Column Column_EmployeeName in images table was dropped'
    END

--------------------------------------------------------------------------
-- ADD  COLUMN Column_EmployeeName IN table_Emplyee table
--------------------------------------------------------------------------
IF NOT EXISTS (
                SELECT 1
                FROM INFORMATION_SCHEMA.COLUMNS
                WHERE TABLE_NAME = 'table_Emplyee'
                  AND COLUMN_NAME = 'Column_EmployeeName'
               )
    BEGIN
    ----- ADD Column & Contraint
        ALTER TABLE dbo.table_Emplyee
            ADD Column_EmployeeName BIT   NOT NULL
            CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]  DEFAULT (0)
        PRINT 'Column [DF_table_Emplyee_Column_EmployeeName] in table_Emplyee table was Added'
        PRINT 'Contraint [DF_table_Emplyee_Column_EmployeeName] was Added'
     END

GO

ডিফল্ট মান সহ একটি বিদ্যমান ডাটাবেস টেবিলে একটি কলাম যোগ করার জন্য এটি দুটি উপায়।


এটি এসএসএমএস GUI হিসাবে ভাল করা যেতে পারে। আমি নীচে একটি ডিফল্ট তারিখ প্রদর্শন কিন্তু অবশ্যই ডিফল্ট মান যাই হোক না কেন হতে পারে।

  1. নকশা দর্শনে আপনার টেবিল রাখুন (বস্তু এক্সপ্লোরার টেবিল ডান ক্লিক করুন-> ডিজাইন)
  2. টেবিলে একটি কলাম যুক্ত করুন (অথবা কলামটিতে ক্লিক করুন যদি এটি ইতিমধ্যে বিদ্যমান থাকে তবে আপডেট করুন)
  3. নীচের কলাম প্রোপার্টিতে, প্রবেশ করুন (getdate()) অথবা abc অথবা 0 অথবা আপনি যে মানটি চান তা ডিফল্ট মান বা বাইন্ডিং ক্ষেত্রের মধ্যে নীচের চিত্রের মতো করুন:


এসকিউএল সার্ভার + আল্টার টেবিল + কলাম + ডিফল্ট মান অনন্য সনাক্তকারী যোগ করুন ...

ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO

ডিফল্ট যদি নাল হয়, তাহলে:

  1. SQL সার্ভারে, লক্ষ্যযুক্ত টেবিলের গাছটি খুলুন
  2. ডান ক্লিক করুন "কলাম" ==> New Column
  3. কলাম নাম Select Type , এবং Nulls মঞ্জুরি দিন চেকবক্স চেক করুন
  4. মেনু বার থেকে, Save ক্লিক Save

সম্পন্ন!


ব্যবহার করুন:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 

শুধুমাত্র দুটি লাইন সঙ্গে সবচেয়ে মৌলিক সংস্করণ

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

প্রথম নাম ছাত্র সঙ্গে একটি টেবিল তৈরি করুন:

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

এতে একটি কলাম যুক্ত করুন:

ALTER TABLE STUDENT 
ADD STUDENT_NAME INT NOT NULL DEFAULT(0)

SELECT * 
FROM STUDENT

টেবিলটি তৈরি করা হয়েছে এবং একটি কলাম একটি বিদ্যমান সারণিতে ডিফল্ট মান সহ যোগ করা হয়েছে।


ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO


ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

DEFAULT অন্তর্ভুক্তি ডিফল্ট মান সহ বিদ্যমান সারির কলামটি পূরণ করে, তাই নূন্যতম সীমাবদ্ধতা লঙ্ঘন করা হয় না।


ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

এই প্রশ্নের থেকে আপনি ডিফল্ট মান 0 দিয়ে ডাটাটাইপ পূর্ণসংখ্যা একটি কলাম যোগ করতে পারেন।





sql-server-2000