it-swarm.asia

كيفية تعيين قيمة افتراضية لعمود موجود

هذا لا يعمل في SQL Server 2008:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

الخطأ هو:

بناء جملة غير صحيح بالقرب من الكلمة الأساسية "SET".

ما الخطأ الذي افعله؟

326
Nakul Chaudhary

سيعمل هذا في SQL Server:

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
504
Yuck
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
149
hoodaticus

لا يمكن استخدام عمود التغيير لذلك ، استخدم الإضافة بدلاً من ذلك

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn
44
Carlos Quintanilla

الطريقة الصحيحة للقيام بذلك هي كما يلي:

  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]
    
26
user3310402

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

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
10
Dave

هناك سيناريوهان يمكن فيه تغيير القيمة الافتراضية لعمود ،

  1. في وقت إنشاء الجدول
  2. تعديل العمود الموجود لجدول موجود.

  1. في وقت إنشاء الجدول/إنشاء عمود جديد.

سؤال

create table table_name
(
    column_name datatype default 'any default value'
);
  1. تعديل العمود الموجود لجدول موجود

في هذه الحالة ، لا يسمح خادم SQL بتعديل قيمة القيد الافتراضية الحالية. لذلك لتغيير القيمة الافتراضية ، نحتاج إلى حذف القيد الافتراضي الذي تم إنشاؤه أو إنشاء المستخدم بواسطة القيد الافتراضي. وبعد ذلك يمكن تعيين القيمة الافتراضية لعمود معين.

اتبع بعض الخطوات:

  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
Sunil Sharma

وجدت فقط 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
David Fawzy
ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]
3
steave

حاول اتباع الأوامر ؛

ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
2
Hasna Ashraf

أول انخفاض القيود

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]
2
Mise

مثل إجابة Yuck مع التحقق للسماح بتشغيل البرنامج النصي أكثر من مرة دون خطأ. (أقل سلاسل التعليمات البرمجية/المخصصة من استخدام information_schema.columns)

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
1
ScottFoster1000

في حالة وجود قيود بالفعل باسمه الافتراضي:

-- 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;
1
tibx