1

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

我在网上看了,它说要使用这个:

ALTER TABLE TABLE_NAME
ALTER COLUMN ColumnName
SET DEFAULT 1234;

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

哦,我想我应该补充一点,我正在尝试编辑的列是一个外键,如果这会改变任何东西的话。

在此先感谢,艾莉

4

4 回答 4

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);
于 2012-05-21T13:33:33.413 回答
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
于 2012-05-21T13:51:47.983 回答
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;
于 2012-05-21T13:35:37.553 回答
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

于 2012-05-21T13:38:29.487 回答