अलर्ट कॉलम, डिफ़ॉल्ट बाधा जोड़ें


186

मेरे पास एक टेबल है और स्तंभों में से एक टाइप डेटाइम का "दिनांक" है। हमने उस कॉलम में एक डिफ़ॉल्ट बाधा जोड़ने का फैसला किया

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

लेकिन यह मुझे त्रुटि देता है:

आगे गलत वाक्य रचना '।'

क्या किसी को कुछ भी स्पष्ट रूप से गलत दिखता है, जो मुझे याद आ रहा है (कॉलम के लिए एक बेहतर नाम होने के अलावा)


11
कॉलम नाम के रूप में टाइप या कीवर्ड का उपयोग न करें!
जोनाह

8
हाँ, सहमत- "क्या किसी को स्पष्ट रूप से यहां कुछ भी गलत दिखाई देता है, जो मुझे याद आ रहा है (स्तंभ के लिए एक बेहतर नाम होने के अलावा)"
ram

जवाबों:


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

यह भी सुनिश्चित करें कि आप डिफ़ॉल्ट बाधा का नाम देते हैं..यह बाद में इसे छोड़ने के लिए गर्दन में दर्द होगा क्योंकि इसमें उन पागल सिस्टम से उत्पन्न नाम होंगे ... यह भी देखें कि डिफ़ॉल्ट बाधाओं को कैसे नाम दें और बिना डिफ़ॉल्ट बाधा को कैसे छोड़ें SQL सर्वर में एक नाम


7

इस प्रकार की त्रुटियों से बचने के लिए आप वर्ग कोष्ठक में आरक्षित शब्द लपेट सकते हैं:

dbo.TableName.[Date]

1
यह कॉलम नामों के लिए आरक्षित शब्दों का उपयोग करने के लिए एक बहुत बुरा विचार है।
नॉर्बर्ट नोबर्टनसन

4
ऐसा लगता है, लेकिन यह नहीं है। मैं 2004 से इनका सफलतापूर्वक उपयोग करता हूं :)
Cătălin Rădoi

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

यह सिर्फ अभ्यास के लिए उपयोग करते हैं, वास्तविकता में उपयोग नहीं कर सकते हैं
Tr

0

आप तालिका का नाम दो बार निर्दिष्ट कर रहे हैं। अन्य तालिका के भाग का नाम तालिका है। आज़माएँ: ऑल्टर टेबल टेबलनेम बदल कॉलम [दिनांक] डिफ़ॉल्ट गेटकूट ()


0

परिवर्तन तालिका TableName ड्रॉप बाधाएं DF_TableName_When परिवर्तित

तालिका परिवर्तित करें तालिका नाम में बाधा के लिए DF_TableName_WhenEntered डिफ़ॉल्ट getutcdate () जोड़ें


इस उत्तर में ड्रॉप बाधा क्वेरी भी शामिल है। यदि किसी ने पहले getdate () जोड़ा था और अब उसे getutcdate () में बदलने की आवश्यकता है। उसे इस उत्तर के माध्यम से कुछ मदद मिल सकती है। @ राल्फफ्राइडल
अभिजीत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.