สิ่งนี้ไม่ทำงานใน SQL Server 2008:
ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
ข้อผิดพลาดคือ:
ไวยากรณ์ไม่ถูกต้องใกล้กับคำหลัก 'SET'
ผมทำอะไรผิดหรือเปล่า?
สิ่งนี้ไม่ทำงานใน SQL Server 2008:
ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
ข้อผิดพลาดคือ:
ไวยากรณ์ไม่ถูกต้องใกล้กับคำหลัก 'SET'
ผมทำอะไรผิดหรือเปล่า?
คำตอบ:
สิ่งนี้จะทำงานใน SQL Server:
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
ไม่สามารถใช้คอลัมน์แก้ไขสำหรับสิ่งนั้นใช้เพิ่มแทน
ALTER TABLE Employee
ADD DEFAULT('SANDNES') FOR CityBorn
วิธีที่ถูกต้องในการทำเช่นนี้มีดังนี้:
เรียกใช้คำสั่ง:
sp_help [table name]
CONSTRAINT
คัดลอกชื่อของ
วางDEFAULT CONSTRAINT
:
ALTER TABLE [table name] DROP [NAME OF CONSTRAINT]
เรียกใช้คำสั่งด้านล่าง:
ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
คำตอบของ 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
มีสองสถานการณ์ที่ค่าเริ่มต้นสำหรับคอลัมน์สามารถเปลี่ยนแปลงได้
สอบถาม
create table table_name
(
column_name datatype default 'any default value'
);
ในกรณีนี้เซิร์ฟเวอร์ SQL ของฉันไม่อนุญาตให้แก้ไขค่า จำกัด เริ่มต้นที่มีอยู่ ดังนั้นในการเปลี่ยนค่าเริ่มต้นเราจำเป็นต้องลบระบบที่มีอยู่ที่สร้างขึ้นหรือผู้ใช้สร้างข้อ จำกัด เริ่มต้น และหลังจากค่าเริ่มต้นนั้นสามารถกำหนดให้กับคอลัมน์ใดคอลัมน์หนึ่งได้
ทำตามขั้นตอนบางอย่าง:
ดำเนินการตามขั้นตอนฐานข้อมูลระบบนี้ใช้ชื่อตารางเป็นพารามิเตอร์ จะส่งคืนรายการข้อ จำกัด ทั้งหมดสำหรับคอลัมน์ทั้งหมดภายในตาราง
execute [dbo].[sp_helpconstraint] 'table_name'
ไวยากรณ์:
alter table 'table_name' drop constraint 'constraint_name'
ไวยากรณ์:
alter table 'table_name' add default 'default_value' for 'column_name'
ไชโย @ !!!
ในกรณีที่มีข้อ จำกัด อยู่แล้วด้วยชื่อเริ่มต้น:
-- 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;
ALTER TABLE [dbo].[Employee] ADD DEFAULT ('N') FOR [CityBorn]
คุณสามารถใช้ไวยากรณ์ต่อไปนี้สำหรับข้อมูลเพิ่มเติมดูคำถามและคำตอบนี้: เพิ่มคอลัมน์ที่มีค่าเริ่มต้นให้กับตารางที่มีอยู่ใน SQL Server
ไวยากรณ์:
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.
อีกวิธีหนึ่ง:
คลิกขวาที่ตารางและคลิกที่ออกแบบจากนั้นคลิกที่คอลัมน์ที่คุณต้องการตั้งค่าเริ่มต้น
จากนั้นที่ด้านล่างของหน้าเพิ่มค่าเริ่มต้นหรือผูกพัน: สิ่งที่ต้องการ '1' สำหรับสตริงหรือ 1 สำหรับ int
เพิ่งค้นพบ 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
ข้อ จำกัด การปล่อยครั้งแรก
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]
ลองใช้คำสั่งต่อไปนี้
ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
เช่นเดียวกับคำตอบของ 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