所以,我已经创建了我的数据库,但现在需要为表中的字段添加一个默认值。我想知道如何做到这一点,而不必删除一半的表和约束。
我在网上看了,它说要使用这个:
ALTER TABLE TABLE_NAME
ALTER COLUMN ColumnName
SET DEFAULT 1234;
但是,我尝试使用它,但我得到“关键字'SET'附近的语法不正确”。我错过了一些非常明显的东西吗?
哦,我想我应该补充一点,我正在尝试编辑的列是一个外键,如果这会改变任何东西的话。
在此先感谢,艾莉
所以,我已经创建了我的数据库,但现在需要为表中的字段添加一个默认值。我想知道如何做到这一点,而不必删除一半的表和约束。
我在网上看了,它说要使用这个:
ALTER TABLE TABLE_NAME
ALTER COLUMN ColumnName
SET DEFAULT 1234;
但是,我尝试使用它,但我得到“关键字'SET'附近的语法不正确”。我错过了一些非常明显的东西吗?
哦,我想我应该补充一点,我正在尝试编辑的列是一个外键,如果这会改变任何东西的话。
在此先感谢,艾莉
-- ============================
-- Create default constraint
-- ============================
ALTER TABLE <schema_name, sysname, dbo>.<table_name, sysname, table_name>
ADD CONSTRAINT df_<column_name, sysname, column_name>
DEFAULT <default_expression, sysname, 0>
FOR <column_name, sysname, column_name>
GO
如果需要添加外键
ALTER TABLE Products WITH CHECK
ADD CONSTRAINT [FK_Prod_Man] FOREIGN KEY(ManufacturerID)
REFERENCES Manufacturers (ID);
只需提供一种方法(应@Romii 的要求)来检查是否已经为列定义了默认值,使用目录视图而不是向后兼容视图。
IF NOT EXISTS
(
SELECT 1 FROM sys.default_constraints AS dc
INNER JOIN sys.columns AS c
ON dc.parent_object_id = c.[object_id]
AND dc.parent_column_id = c.column_id
WHERE dc.parent_object_id = OBJECT_ID('dbo.TableName')
AND c.name = 'ColumnName'
)
BEGIN
ALTER TABLE dbo.TableName
ADD CONSTRAINT DF_TableName_ColumnName
DEFAULT 'whatever' FOR ColumnName;
END
使用以下查询检查是否已在该表的列上定义了默认约束。
SELECT d.definition ,c.name,d.name
FROM sys.default_constraints AS d
INNER JOIN sys.columns AS c
ON d.parent_column_id = c.column_id
WHERE d.parent_object_id = OBJECT_ID(N'[dbo].[TableName]', N'U')
AND c.name = 'ColumnName';
在表的列上添加默认约束的语法。
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
示例查询:
ALTER TABLE TABLE_NAME
ADD CONSTRAINT DF_TABLENAME_ColumnName
DEFAULT 1234 FOR ColumnName;
要将默认约束添加到现有列,您可以使用如下ALTER TABLE
命令:
ALTER TABLE <TableName>
add constraint <ConstraintName>
default <DefaultValue> for <TargetColumn>
一个例子:
ALTER TABLE Pages
add constraint DF_Pages__Link
default 'asdf' for Link
(我对默认约束的命名约定是DF_ + tablename + __ + column name
)