创建表后,如何在SQL Server中添加默认值?

时间:2012-05-21 13:30:38

标签: sql-server-2008 default-value alter-table

所以,我已经创建了我的数据库,但现在需要为表中的字段添加默认值。我想知道如何做到这一点,而不必丢掉一半的表和约束。

我在网上看了它并说它用这个:

ALTER TABLE TABLE_NAME
ALTER COLUMN ColumnName
SET DEFAULT 1234;

我尝试使用它,然而,我得到“关键字'SET'附近的语法错误。”我错过了一些非常明显的东西吗?

哦,我想我应该补充一点,我正在尝试编辑的列是外键,如果这改变了什么。

提前致谢, 埃利

4 个答案:

答案 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