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




sql-server sql-server-2008 (4)

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

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

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

কিন্তু এই আমাকে ত্রুটি দেয়:

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

কেউ কি এখানে অবশ্যই কিছু ভুল দেখতে পায়, যা আমি অনুপস্থিত (কলামের জন্য একটি ভাল নাম থাকা ছাড়া)


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

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

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

-- 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.

এটা চেষ্টা কর

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

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


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

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






alter-column