it-swarm.asia

إضافة عمود بقيمة افتراضية إلى جدول موجود في SQL Server

كيف يمكن إضافة عمود ذي قيمة افتراضية إلى جدول موجود في SQL Server 2000 / SQL Server 2005 ؟

2504
Mathias

بناء الجملة:

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 Server تلقائيًا
انتهاك افتراضي باسم مضحك مثل: DF__SomeTa__SomeC__4FB7FEF6

بيان اختياري مع القيم:
WITH VALUES مطلوبة فقط عندما يكون العمود الخاص بك Nullable
وتريد استخدام القيمة الافتراضية للسجلات الموجودة.
إذا كان العمود الخاص بك هو NOT NULL ، فسيستخدم القيمة الافتراضية تلقائيًا
لجميع السجلات الموجودة ، سواء حددت WITH VALUES أم لا.

كيفية عمل إدراج مع قيد افتراضي:
إذا قمت بإدراج "سجل" في SomeTable وقمت لا حدد قيمة SomeCol ، فسيتم افتراضيًا إلى 0.
إذا أدرجت سجل و حدد قيمة SomeCol كـ NULL (ويسمح العمود الخاص بك بالقيم الخالية)
ثم سيتم استخدام القيد الافتراضي لا وسيتم إدراج NULL كقيمة.

استندت الملاحظات إلى تعليقات الجميع الرائعة أدناه.
شكر خاص ل:
Yatrix وWalterStabosz و @ YahooSerious و @ StackMan لتعليقاتهم.

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

إدراجالافتراضييملأ العمود في موجود الصفوف بالقيمة الافتراضية ، لذلك لا ينتهك قيد NOT NULL.

932
dbugger

عند إضافة عمود nullable ، سوف يضمن WITH VALUES تطبيق قيمة DEFAULT المحددة على الصفوف الموجودة:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
218
phunk_munkie
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
128
ddc0660
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
117
Evan V

احذر عندما يكون العمود الذي تضيفه قيد NOT NULL ، ولكن لا يحتوي على قيد DEFAULT (قيمة). ستفشل عبارة ALTER TABLE في هذه الحالة إذا كان الجدول به أي صفوف. يكمن الحل في إزالة القيد NOT NULL من العمود الجديد ، أو توفير قيد DEFAULT لذلك.

94
jalbert

الإصدار الأكثر أساسية مع سطرين فقط

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
92
adeel41

استعمال:

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

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

إذا كنت ترغب في إضافة أعمدة متعددة ، فيمكنك القيام بذلك بهذه الطريقة على سبيل المثال:

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO
67
Gabriel L.

استعمال:

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

المرجع: ALTER TABLE (Transact-SQL) (MSDN)

50
giá vàng

في SQL Server 2008-R2 ، أذهب إلى وضع التصميم - في قاعدة بيانات الاختبار - وأضيف عمودي باستخدام المصمم وأعد الإعدادات باستخدام واجهة المستخدم الرسومية ، ثم سيئ السمعة Right-Click يعطي الخيار " إنشاء سيناريو التغيير "!

تنبثق ميزة "نافذة الضغط" نافذة صغيرة بها ، كما كنت تفكر في ذلك ، البرنامج النصي للتغيير المضمون بشكل صحيح للعمل. اضغط على زر سهل.

48
Jack

يمكنك أن تفعل الشيء مع T-SQL بالطريقة التالية.

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

بالإضافة إلى أنه يمكنك استخدام SQL Server Management Studio أيضًا عن طريق النقر بزر الماوس الأيمن فوق الجدول في قائمة "التصميم" ، قم بتعيين القيمة الافتراضية للجدول.

علاوة على ذلك ، إذا كنت تريد إضافة نفس العمود (إذا لم يكن موجودًا) إلى جميع الجداول في قاعدة البيانات ، فاستخدم:

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

لإضافة عمود إلى جدول قاعدة بيانات موجود بقيمة افتراضية ، يمكننا استخدام:

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

هذه طريقتان لإضافة عمود إلى جدول قاعدة بيانات موجود بقيمة افتراضية.

45
Catto

بدلاً من ذلك ، يمكنك إضافة افتراضي دون الحاجة إلى تسمية القيد بشكل صريح:

ALTER TABLE [schema].[tablename] ADD  DEFAULT ((0)) FOR [columnname]

إذا كانت لديك مشكلة تتعلق بالقيود الافتراضية الحالية عند إنشاء هذا القيد ، فيمكن إزالتها عن طريق:

alter table [schema].[tablename] drop constraint [constraintname]
45
Christo
ALTER TABLE ADD ColumnName {Column_Type} Constraint

تحتوي المقالة MSDNALTER TABLE (Transact-SQL)على كل من بناء جملة جدول تبديل.

38
Benjamin Autin

يمكن القيام بذلك في واجهة المستخدم الرسومية SSMS كذلك. أقوم بعرض تاريخ افتراضي أدناه ولكن القيمة الافتراضية يمكن أن تكون مهما ، بالطبع.

  1. ضع الجدول في طريقة عرض التصميم (انقر بزر الماوس الأيمن على الجدول في كائن Explorer-> التصميم)
  2. أضف عمودًا إلى الجدول (أو انقر فوق العمود الذي تريد تحديثه إذا كان موجودًا بالفعل)
  3. في خصائص العمود أدناه ، أدخل (getdate()) أو abc أو 0 أو أي قيمة تريدها في القيمة الافتراضية أو التجليد الحقل كما هو موضح أدناه:

 enter image description here

33
Tony L.

مثال:

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

مثال:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';
23
Mohit Tamrakar

أولاً إنشاء جدول مع اسم الطالب:

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

إضافة عمود واحد إليه:

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

SELECT * 
FROM STUDENT

يتم إنشاء الجدول وإضافة عمود إلى جدول موجود بقيمة افتراضية.

 Image 1

20
Laxmi

مزود خادم + الجدول تغيير + إضافة عمود + القيمة الافتراضية uniqueidentifier

ALTER TABLE Product 
ADD ReferenceID uniqueidentifier not null 
default (cast(cast(0 as binary) as uniqueidentifier))
18
Naveen Desosha

جرب هذا

ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
17
Jakir Hossain
IF NOT EXISTS (
    SELECT * FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME ='TABLENAME' AND COLUMN_NAME = 'COLUMNNAME'
)
BEGIN
    ALTER TABLE TABLENAME ADD COLUMNNAME Nvarchar(MAX) Not Null default
END
16
Jeevan Gharti

هذا لديه الكثير من الإجابات ، لكنني أشعر بالحاجة إلى إضافة هذه الطريقة الموسعة. يبدو هذا أطول من ذلك بكثير ، لكنه مفيد للغاية إذا كنت تقوم بإضافة حقل NOT NULL إلى جدول به ملايين الصفوف في قاعدة بيانات نشطة.

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

ما سوف يفعله هذا هو إضافة العمود كحقل لاغٍ وبقيمة افتراضية ، قم بتحديث جميع الحقول إلى القيمة الافتراضية (أو يمكنك تعيين قيم أكثر وضوحًا) ، وأخيرًا سيغير العمود ليكون NULL.

والسبب في ذلك هو أنه إذا قمت بتحديث جدول كبير الحجم وأضفت حقلًا جديدًا غير فارغ ، فيجب أن تكتب إلى كل صف ، وبذلك ستغلق الجدول بأكمله لأنه يضيف العمود ثم يكتب جميع القيم.

ستضيف هذه الطريقة العمود nullable الذي يعمل بشكل أسرع كثيرًا بمفرده ، ثم يملأ البيانات قبل تعيين الحالة غير الفارغة.

لقد وجدت أن القيام بالأمر بالكامل في عبارة واحدة سيؤدي إلى إغلاق أحد الطاولات الأكثر نشاطًا لمدة 4-8 دقائق وغالبًا ما قتلت العملية. هذه الطريقة عادة ما يستغرق كل جزء بضع ثوان فقط ويتسبب في الحد الأدنى من قفل.

بالإضافة إلى ذلك ، إذا كان لديك جدول في مساحة المليارات من الصفوف ، فقد يكون من المفيد دفع التحديث كالتالي:

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

    IF @@ROWCOUNT < 1000000
        BREAK;
END
14
Ste Bov
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
14
wild coder

أضف عمودًا جديدًا إلى جدول:

ALTER TABLE [table]
ADD Column1 Datatype

فمثلا،

ALTER TABLE [test]
ADD ID Int

إذا أراد المستخدم جعله تلقائيًا ، فقم بما يلي:

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

ويمكن القيام بذلك عن طريق الرمز أدناه.

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
10
Mohit Dagar
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

من هذا الاستعلام ، يمكنك إضافة عمود عدد صحيح من نوع البيانات مع القيمة الافتراضية 0.

9
Sandeep Kumar

حسنًا ، لدي الآن بعض التعديلات على إجابتي السابقة. لقد لاحظت أن أيا من الإجابات المذكورة 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 ، لذلك وضعت القيمة الافتراضية 1.

أقترح النظام أعلاه ، لأنني واجهت مشكلة. فما هي المشكلة؟ المشكلة هي ، إذا كان العمود IsBilledToClient موجودًا في جدول الجدول ، فإذا قمت بتنفيذ جزء الكود الوارد أدناه فقط ، فسترى خطأً في منشئ استعلام خادم SQL. ولكن إذا لم يكن موجودًا ، فلن يكون هناك خطأ عند التنفيذ لأول مرة.

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

يمكنك استخدام هذا الاستعلام:

ALTER TABLE tableName ADD ColumnName datatype DEFAULT DefaultValue;
7
Arun D

إذا كان الإعداد الافتراضي هو Null ، فعندئذٍ:

  1. في SQL Server ، افتح شجرة الجدول المستهدف
  2. انقر بزر الماوس الأيمن فوق "الأعمدة" ==> New Column
  3. اكتب اسم العمود ، Select Type ، وحدد خانة الاختيار السماح بالقيم الخالية
  4. من شريط القوائم ، انقر فوق Save

فعله!

7
usefulBee

SQL Server + جدول التعديل + إضافة عمود + القيمة الافتراضية uniqueidentifier ...

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

انقر بزر الماوس الأيمن فوق الجدول ، وانقر أسفل اسم العمود الأخير ، وأدخل معلومات العمود.

ثم أضف قيمة أو رابطًا افتراضيًا ، مثل "1" للسلسلة أو 1 لـ int.

6
Mohamad Shahrestani

هذا لـ SQL Server:

ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES

مثال:

ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES

إذا كنت ترغب في إضافة قيود ثم:

ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES
6
Akhil Singh

الخطوة 1. أول ما عليك تغييره مع إضافة حقل

alter table table_name add field field_name data_type

step-2 CREATE DEFAULT

USE data_base_name;
GO
CREATE DEFAULT default_name AS 'default_value';

الخطوة 3 ، ثم يجب عليك تنفيذ هذا الإجراء

exec sp_bindefault 'default_name' , 'schema_name.table_name.field_name'

مثال -

USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';
5
raju chowrsiya
--Adding New Column with Default Value
ALTER TABLE TABLENAME 
ADD COLUMNNAME DATATYPE NULL|NOT NULL DEFAULT (DEFAULT_VALUE)

OR

--Adding CONSTRAINT And Set Default Value on Column
ALTER TABLE TABLENAME ADD  CONSTRAINT [CONSTRAINT_Name]  DEFAULT 
(DEFAULT_VALUE) FOR [COLUMNNAME]
4
Erfan Mohammadi
ALTER TABLE Table1 ADD Col3 INT NOT NULL DEFAULT(0)
3
Krishan Dutt Sharma

جرب باستخدام الاستعلام التالي:

ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue

سيؤدي هذا إلى إضافة عمود جديد في الجدول.

2
Anshul Dubey