所以,我已经创建了我的数据库,但现在需要为表中的字段添加默认值。我想知道如何做到这一点,而不必丢掉一半的表和约束。
我在网上看了它并说它用这个:
ALTER TABLE TABLE_NAME
ALTER COLUMN ColumnName
SET DEFAULT 1234;
我尝试使用它,然而,我得到“关键字'SET'附近的语法错误。”我错过了一些非常明显的东西吗?
哦,我想我应该补充一点,我正在尝试编辑的列是外键,如果这改变了什么。
提前致谢, 埃利
答案 0 :(得分:1)
-- ============================
-- 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);
答案 1 :(得分:1)
使用目录视图而不是向后兼容性视图,只提供一个方法(在@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
答案 2 :(得分:0)
使用以下查询来检查是否已在该表的列上定义了默认约束。
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;
答案 3 :(得分:0)
要向现有列添加默认约束,您可以使用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
)