কলাম পরিবর্তন করুন, ডিফল্ট সীমাবদ্ধতা যুক্ত করুন


185

আমার একটি টেবিল রয়েছে এবং কলামগুলির একটি হ'ল তারিখ টাইপের "তারিখ"। আমরা এই কলামটিতে একটি ডিফল্ট সীমাবদ্ধতা যুক্ত করার সিদ্ধান্ত নিয়েছি

Alter table TableName
alter column dbo.TableName.Date default getutcdate() 

তবে এটি আমার ত্রুটি দেয়:

ভুল বাক্য গঠন কাছাকাছি '.'

এখানে কি কেউ স্পষ্টত ভুল দেখতে পাচ্ছে, যা আমি মিস করছি (কলামটির আরও ভাল নাম বাদে)


11
প্রকার বা কীওয়ার্ডগুলি কলামের নাম হিসাবে ব্যবহার করবেন না!
জোনএইচ

8
হ্যাঁ, রাজি হয়েছে- "এখানে কি কেউ স্পষ্টত ভুল দেখতে পাচ্ছে, যা আমি অনুপস্থিত (কলামটির আরও ভাল নাম
রাম

উত্তর:


349

এটা চেষ্টা কর

alter table TableName 
 add constraint df_ConstraintNAme 
 default getutcdate() for [Date]

উদাহরণ

create table bla (id int)

alter table bla add constraint dt_bla default 1 for id



insert bla default values

select * from bla

এটিও নিশ্চিত করুন যে আপনি ডিফল্ট সীমাবদ্ধতার নাম রেখেছেন..এটি পরে ফেলে দেওয়ার জন্য ঘাড়ে ব্যথা হবে কারণ এর মধ্যে এমন একটি ক্রেজি সিস্টেম তৈরি করা নাম থাকবে ... এছাড়াও ডিফল্ট সীমাবদ্ধতার নাম কীভাবে রাখবেন এবং কীভাবে ডিফল্ট সীমাবদ্ধতা ছাড়বেন তাও দেখুন এসকিউএল সার্ভারে একটি নাম


7

এই ধরণের ত্রুটি এড়াতে আপনি বর্গাকার বন্ধনীগুলিতে সংরক্ষিত শব্দগুলি মুড়ে রাখতে পারেন:

dbo.TableName.[Date]

1
কলাম নামের জন্য সংরক্ষিত শব্দ ব্যবহার করা সত্যিই খারাপ ধারণা বলে মনে হচ্ছে।
নরবার্ট নবার্টসন

4
মনে হচ্ছে, তবে তা নয়। আমি এগুলি 2004 এর পর থেকে সফলভাবে ব্যবহার করছি :)
ক্যাটালিন রাডোই

7

আমি কলামে ডিফল্ট আপডেট করতে নীচে সঞ্চিত পদ্ধতিটি ব্যবহার করি।

নতুন ডিফল্ট যুক্ত করার আগে এটি স্বয়ংক্রিয়ভাবে কলামের পূর্বের কোনও ডিফল্টগুলি সরিয়ে দেয়।

ব্যবহারের উদাহরণ:

-- Update default to be a date.
exec [dbo].[AlterDefaultForColumn] '[dbo].[TableName]','Column','getdate()';
-- Update default to be a number.
exec [dbo].[AlterDefaultForColumn] '[dbo].[TableName]','Column,'6';
-- Update default to be a string. Note extra quotes, as this is not a function.
exec [dbo].[AlterDefaultForColumn] '[dbo].[TableName]','Column','''MyString''';

সংরক্ষিত নীতিমালা:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- Sample function calls:
--exec [dbo].[AlterDefaultForColumn] '[dbo].[TableName]','ColumnName','getdate()';
--exec [dbol].[AlterDefaultForColumn] '[dbo].[TableName]','Column,'6';
--exec [dbo].[AlterDefaultForColumn] '[dbo].[TableName]','Column','''MyString''';
create PROCEDURE [dbo].[ColumnDefaultUpdate]
    (
        -- Table name, including schema, e.g. '[dbo].[TableName]'
        @TABLE_NAME VARCHAR(100), 
        -- Column name, e.g. 'ColumnName'.
        @COLUMN_NAME VARCHAR(100),
        -- New default, e.g. '''MyDefault''' or 'getdate()'
        -- Note that if you want to set it to a string constant, the contents
        -- must be surrounded by extra quotes, e.g. '''MyConstant''' not 'MyConstant'
        @NEW_DEFAULT VARCHAR(100)
    )
AS 
BEGIN       
    -- Trim angle brackets so things work even if they are included.
    set @COLUMN_NAME = REPLACE(@COLUMN_NAME, '[', '')
    set @COLUMN_NAME = REPLACE(@COLUMN_NAME, ']', '')

    print 'Table name: ' + @TABLE_NAME;
    print 'Column name: ' + @COLUMN_NAME;
    DECLARE @ObjectName NVARCHAR(100)
    SELECT @ObjectName = OBJECT_NAME([default_object_id]) FROM SYS.COLUMNS
    WHERE [object_id] = OBJECT_ID(@TABLE_NAME) AND [name] = @COLUMN_NAME;

    IF @ObjectName <> '' 
    begin
        print 'Removed default: ' + @ObjectName;
        --print('ALTER TABLE ' + @TABLE_NAME + ' DROP CONSTRAINT ' + @ObjectName)
        EXEC('ALTER TABLE ' + @TABLE_NAME + ' DROP CONSTRAINT ' + @ObjectName)
    end

    EXEC('ALTER TABLE ' + @TABLE_NAME + ' ADD  DEFAULT (' + @NEW_DEFAULT + ') FOR ' + @COLUMN_NAME)
    --print('ALTER TABLE ' + @TABLE_NAME + ' ADD  DEFAULT (' + @NEW_DEFAULT + ') FOR ' + @COLUMN_NAME)
    print 'Added default of: ' + @NEW_DEFAULT;
END

ত্রুটিগুলি এই সঞ্চিত পদ্ধতিটি সরিয়ে দেয়

যদি আপনি ইতিমধ্যে একটি কলামে একটি ডিফল্ট যুক্ত করার চেষ্টা করেন তবে ইতিমধ্যে এটি উপস্থিত থাকলে আপনি নীচের ত্রুটিটি পাবেন (এমন কিছু যা আপনি কখনই দেখতে পাবেন না এই সঞ্চিত প্রকল্পটি ব্যবহার করা থাকলে):

-- Using the stored procedure eliminates this error:
Msg 1781, Level 16, State 1, Line 1
Column already has a DEFAULT bound to it.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.

5

আসলে আপনাকে নীচের মত উদাহরণটি করতে হবে, যা সমস্যা সমাধানে সহায়তা করবে ...

drop table ABC_table

create table ABC_table
(
    names varchar(20),
    age int
)

ALTER TABLE ABC_table
ADD CONSTRAINT MyConstraintName
DEFAULT 'This is not NULL' FOR names

insert into ABC(age) values(10)

select * from ABC

এটি কেবল অনুশীলনের জন্য ব্যবহার করুন, বাস্তবে ব্যবহার করতে পারবেন না
ট্রানং লং

0

আপনি টেবিলের নামটি দু'বার উল্লেখ করছেন। অল্টার টেবিল অংশটি সারণির নাম দেয়। চেষ্টা করুন: টেবিলের নাম সারণী নাম পরিবর্তন করুন কলাম [তারিখ] ডিফল্ট getutcdate পরিবর্তন করুন ()


0

টেবিলের নাম টেনে নামার জন্য সারণি পরিবর্তন করুন DF_TableName_WenEntered hen

টেবিলের পরিবর্তন সারণীকরণ নাম অন্তর্ভুক্তকরণ বাধা DF_TableName_WhenEnters ডিফল্ট getutcdate () প্রবেশ করার পরে


এই উত্তরে ড্রপ সীমাবদ্ধতা ক্যোয়ারীও রয়েছে if তিনি এই উত্তর মাধ্যমে কিছু সাহায্য পেতে পারেন। @ র‌্যালফফ্রিডল
অভিজিৎ পূজারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.