একটি বিদ্যমান কলামের জন্য কীভাবে একটি ডিফল্ট মান সেট করা যায়


375

এটি এসকিউএল সার্ভার ২০০৮ এ কাজ করছে না:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

ত্রুটিটি হ'ল:

'SET' কীওয়ার্ডের নিকটে ভুল সিনট্যাক্স।

আমি কি ভুল করছি?


1
এমএসডিএন অলটার টেবিলে আপনি কী পড়লেন ...? msdn.microsoft.com/en-us/library/ms187742(SQL.90).aspx
gbn



1
এটি মাইএসকিএল সিনট্যাক্স।
বেনজমিন গুডাক্রে

সবাই কেন কেবল একটি মানকে আটকে রাখতে পারে না? (আসল প্রশ্ন নয়, প্রত্যেকে মাইক্রোসফ্ট এবং মাইএসকিএল বা অন্যান্য বিক্রেতাদের উল্লেখ করছেন)। এটি করার কি কোনও আনসি / আইসো মানক উপায় আছে?
joedotnot

উত্তর:


566

এটি এসকিউএল সার্ভারে কাজ করবে:

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;

62
সীমাবদ্ধতার নাম নির্দিষ্ট করার জন্য +1, যাতে এসকিউএল সার্ভার কোনও এলোমেলো নাম তৈরি করে না।
হার্ডকোড

36
এমএসএসকিউএল ডিফল্ট মানগুলিকে "সীমাবদ্ধতা" বলার জন্য অদ্ভুত। যদি কিছু হয় তবে সেগুলি অবসর ; বিপরীত একটি বাধ্যতা এর! তারা আরও কম জিনিস বৈধ করে তোলে।
রোমান স্টারকভ

4
আপনি যদি বিকল্প পদ্ধতিতে ভাবেন তবে এটি অদ্ভুত নয়: ডিফল্ট সীমাবদ্ধতাটি যদি আপনি কলামটি নির্দিষ্ট না করেন তবে এমএসএসকিউএলকে একটি ত্রুটি ছুঁতে বাধা দেয়। সুতরাং এটি ব্যবহারকারীর পক্ষে বাধা নয়, তবে এমএসএসকিউএল-র সীমাবদ্ধতা।
জনি পিয়াজি

4
কলামে বিদ্যমান ডিফল্ট সীমাবদ্ধতা না থাকলে এটি কেবলমাত্র কাজ করে।
সন্ধ্যা 21: 21

4
@ ফ্যালেনিডল কলামে বিদ্যমান ডিফল্ট সীমাবদ্ধতা না থাকলে এটি কেবলমাত্র কাজ করে। ঠিক আছে, কারণ সংজ্ঞা অনুসারে আপনার একাধিক ডিফল্ট মান থাকতে পারে না ...
ইয়াক

165
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn

3
এটি এমএসএসকিউএলে কাজ করে, তবে এতে অসুবিধা রয়েছে যে এটি দৃশ্যের পিছনে যে প্রতিবন্ধকতা সৃষ্টি করে তার নাম দেয় না (উপরে উচ্চতর ভোট দেওয়া উত্তরটি দেখুন)।
কনটাঙ্গো

10
@ কনটাঙ্গো আমি মনে করি যে আপনি যে কোনও একটি প্রতিবন্ধকতার যে কোনও সংশোধন করতে হবে সেটির প্রতি প্রতিবন্ধকতার নামকরণ করা বিরক্ত করবেন না better কেবল নামকরণের সীমাবদ্ধতাগুলি স্বয়ংক্রিয়ভাবে ফেলে দেওয়ার জন্য একটি প্রক্রিয়া লিখুন এবং আপনাকে আর কখনও নামকরণ করতে হবে না + অন্য সমস্ত নামবিহীন
সমস্যাগুলি

3
@ জনি লিডস ভাল যুক্তি. আমি বাধাগুলির নামও দিতে চাই, কারণ এটি যে কোনওর জন্য ডাটাবেস স্কিমা সংশোধন করার (বা কেবল বুঝতে) চেষ্টা করার পক্ষে ভাল ডকুমেন্টেশন। যদি কোনও একক দলে কাজ করা একক অপারেটর হয় তবে এটি কম গুরুত্বপূর্ণ।
কনটাঙ্গো

1
(EESH! লাইন ফিডের অভাবের জন্য দুঃখিত - স্পষ্টতার জন্য নীচে আটকানো হয়েছে!) আমার এটি পুনরায় চালনার যোগ্য হতে হবে এবং এটি ইতিমধ্যে সম্পন্ন হয়েছে কিনা তা পরীক্ষা করার জন্য এটি খুঁজে পাওয়া দরকার ... যদি উপস্থিত না থাকে (তথ্য থেকে_সীমা থেকে কলামগুলি নির্বাচন করুন) TABLE_NAME = 'myTable' এবং COLUMN_NAME = 'myColumn' এবং Table_schema = 'myDBO' এবং column_default নাল) আরম্ভ ALTER টেবিল [myDBO] [myTable] জুড়তে ডিফল্ট 0 [myColumn] এর জন্য শেষ।
ডেভ

4
যদি কেবলমাত্র একটি ডিফল্ট সীমাবদ্ধতা থাকে ... তবে কেন এটির নাম রাখতে হবে? দেখে মনে হচ্ছে অন্যান্য ডাটাবেস ইঞ্জিনগুলি কলামের নাম ব্যতীত অন্য কোনও নাম ছাড়া কলামের জন্য ডিফল্ট মান যুক্ত, আপডেট করতে, মুছে ফেলার জন্য সিনট্যাক্স সরবরাহ করে যা বোঝা যায়। উপরের কোডটি বিফল হয়, বিটিডব্লিউ, যদি কোনও ডিফল্ট ইতিমধ্যে উপস্থিত থাকে। এটি হাস্যকর যে এসকিউএল সার্ভারের কেবলমাত্র একটি ডিফল্ট সীমাবদ্ধতার নাম সনাক্তকরণের জন্য একটি সিস্টেম টেবিলের বিপরীতে একটি জটিল যোগদানের প্রয়োজন, যা প্রয়োজনীয় হওয়া উচিত নয় কারণ একটি কলামে কেবলমাত্র একটি ডিফল্ট বাধা থাকতে পারে।
Triynko

51

এর জন্য পরিবর্তিত কলাম ব্যবহার করতে পারবেন না, পরিবর্তে যুক্ত ব্যবহার করুন

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn

9
কেন জানি না এই উত্তরটি আপভোট হয় না। এটি ঠিক আগের মতোই ছিল এবং এর আগে উত্তর দেওয়া হয়েছিল ...
spankmaster79

30

এটি করার সঠিক উপায়টি নিম্নরূপ:

  1. কমান্ডটি চালান:

    sp_help [table name] 
  2. এর নামটি অনুলিপি করুন CONSTRAINT

  3. ফেলে দিন DEFAULT CONSTRAINT:

    ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] 
  4. নীচের কমান্ডটি চালান:

    ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]

4
স্ট্যাকওভারফ্লো ডটকম কেবলমাত্র ইংরেজি ভাষা। পর্তুগিজ সাইটটি pt.stackoverflow.com
মার্টিন স্মিথ

এটি অন্য উত্তরে নতুন কিছু যুক্ত করে না, এটি একটি ম্যানুয়াল পদ্ধতি - লিপিটি লেখা যায় না এবং এটি "সঠিক উপায়" হিসাবে বর্ণনা করে ..
আন্দ্রে ফিগুয়েরেদো

12

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

IF EXISTS(SELECT * FROM information_schema.columns 
           WHERE table_name='myTable' AND column_name='myColumn' 
             AND Table_schema='myDBO' AND column_default IS NULL) 
BEGIN 
  ALTER TABLE [myDBO].[myTable] ADD DEFAULT 0 FOR [myColumn] --Hoodaticus
END

7

দুটি পরিস্থিতিতে রয়েছে যেখানে কলামের জন্য ডিফল্ট মান পরিবর্তন করা যেতে পারে,

  1. টেবিল তৈরির সময়
  2. বিদ্যমান সারণীর জন্য বিদ্যমান কলামটি সংশোধন করুন।

  1. টেবিল তৈরি করার সময় / নতুন কলাম তৈরি করার সময়।

প্রশ্ন

create table table_name
(
    column_name datatype default 'any default value'
);
  1. বিদ্যমান সারণীর জন্য বিদ্যমান কলামটি সংশোধন করুন

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

কিছু পদক্ষেপ অনুসরণ করুন:

  1. কলামগুলির জন্য সমস্ত বিদ্যমান ডিফল্ট মান সীমাবদ্ধতার তালিকা করুন।

এই সিস্টেমের ডাটাবেস পদ্ধতিটি চালান, এটি পরামিতি হিসাবে সারণীর নাম নেয়। এটি টেবিলের মধ্যে থাকা সমস্ত কলামের জন্য সমস্ত প্রতিবন্ধকতার তালিকা দেয়।

execute [dbo].[sp_helpconstraint] 'table_name'
  1. কলামের জন্য বিদ্যমান ডিফল্ট সীমাবদ্ধতা ফেলে দিন।

বাক্য গঠন:

alter table 'table_name' drop constraint 'constraint_name'
  1. এই কলামটির জন্য নতুন ডিফল্ট মান সীমাবদ্ধ করুন:

বাক্য গঠন:

alter table 'table_name' add default 'default_value' for 'column_name'

চিয়ার্স @ !!!


5

যদি এর ডিফল্ট নাম সহ কোনও সীমাবদ্ধতা ইতিমধ্যে উপস্থিত থাকে:

-- Drop existing default constraint on Employee.CityBorn
DECLARE @default_name varchar(256);
SELECT @default_name = [name] FROM sys.default_constraints WHERE parent_object_id=OBJECT_ID('Employee') AND COL_NAME(parent_object_id, parent_column_id)='CityBorn';
EXEC('ALTER TABLE Employee DROP CONSTRAINT ' + @default_name);

-- Add default constraint on Employee.CityBorn
ALTER TABLE Employee ADD CONSTRAINT df_employee_1 DEFAULT 'SANDNES' FOR CityBorn;


4

আপনি নিম্নলিখিত সিনট্যাক্সটি ব্যবহার করতে পারেন, আরও তথ্যের জন্য এই প্রশ্নটি এবং উত্তরগুলি দেখুন: এসকিউএল সার্ভারের একটি বিদ্যমান টেবিলটিতে ডিফল্ট মান সহ একটি কলাম যুক্ত করুন

বাক্য গঠন :

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.

অন্য উপায় :

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

তারপরে পৃষ্ঠার নীচে একটি ডিফল্ট মান বা বাঁধাই যুক্ত করুন: স্ট্রিংয়ের জন্য '1' বা ইনট এর জন্য 1 এর মতো কিছু।


3

ইতিমধ্যে বিদ্যমান কলামটি পূর্বে শূন্য করার জন্য মাত্র 3 টি সহজ পদক্ষেপ পেয়েছে

update   orders
set BasicHours=0 where BasicHours is null

alter table orders 
add default(0) for BasicHours

alter table orders 
alter  column CleanBasicHours decimal(7,2) not null 

3

প্রথম ড্রপ বাধা

https://stackoverflow.com/a/49393045/2547164

DECLARE @ConstraintName nvarchar(200)
SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS
WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__')
AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns
                        WHERE NAME = N'__ColumnName__'
                        AND object_id = OBJECT_ID(N'__TableName__'))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName)

দ্বিতীয়টি ডিফল্ট মান তৈরি করুন

ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]


1

ত্রুটি ছাড়াই স্ক্রিপ্টটি একাধিকবার চালানোর অনুমতি দেওয়ার জন্য চেক সহ ইয়াকের উত্তরটি পছন্দ করুন। (ইনফরমেশন_সেমিমা কলামগুলি ব্যবহার করার চেয়ে কম কোড / কাস্টম স্ট্রিং)

IF object_id('DF_SomeName', 'D') IS NULL BEGIN
    Print 'Creating Constraint DF_SomeName'
   ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
END
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.