更改列默认值

22 浏览
0 Comments

更改列默认值

我知道你可以像这样更改现有列的默认值:\nALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N\'SANDNES\' FOR CityBorn;\n但根据这个,我的查询应该起作用:\n

ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL 
      CONSTRAINT DF_Constraint DEFAULT GetDate()

\n所以在这里,我试图将我的列设置为非空并设置默认值。但是出现了 CONSTRAINT 附近的语法错误。我是不是漏掉了什么?

0
0 Comments

问题的原因是在使用ALTER COLUMN语句修改列的默认值时,语法错误。解决方法是使用ALTER TABLE语句结合ADD CONSTRAINT语句来添加默认约束。

ALTER TABLE语句用于修改表的结构,包括列的属性和约束。ALTER COLUMN子句用于修改列的属性,例如数据类型、长度和默认值。在这里,我们想要修改MyTable表中CreateDate列的默认值。

原始的语句中使用了ALTER COLUMN语句来修改列的默认值。然而,这是错误的语法,因为ALTER COLUMN语句不能直接用于修改默认值。正确的做法是使用ALTER TABLE语句结合ADD CONSTRAINT语句来添加默认约束。

在修正后的语句中,首先使用ALTER TABLE语句来修改列的属性。ALTER COLUMN CreateDate DATETIME NOT NULL表示将CreateDate列的数据类型修改为DATETIME,并设置为非空。

然后,使用ALTER TABLE语句结合ADD CONSTRAINT语句来添加默认约束。ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate表示为CreateDate列添加一个名为DF_Constraint的默认约束,该约束的默认值为GetDate()函数的返回值。

通过这样的修正,我们成功地解决了使用ALTER COLUMN修改列的默认值的问题。

0
0 Comments

问题:如何更改SQL服务器中列的默认值?

原因:SQL服务器没有直接的方法来更改列的默认值。

解决方法:使用以下参数化脚本来更改列的默认值:

DECLARE @TableName NVARCHAR(100);
DECLARE @ColumnName NVARCHAR(100);
DECLARE @DefaultValue NVARCHAR(100);
SET @TableName = N'TableName';
SET @ColumnName = N'ColumnName';
SET @DefaultValue = N'0';
IF EXISTS (
    SELECT name
    FROM sys.default_constraints
    WHERE parent_object_id = OBJECT_ID(@TableName)
    AND parent_column_id = COLUMNPROPERTY(OBJECT_ID(@TableName), @ColumnName, 'ColumnId')
)
BEGIN
    DECLARE @ConstraintName AS NVARCHAR(200);
    DECLARE @AlterTableStatement AS NVARCHAR(2000);
    SELECT @ConstraintName = name
    FROM sys.default_constraints
    WHERE parent_object_id = OBJECT_ID(@TableName)
    AND parent_column_id = COLUMNPROPERTY(OBJECT_ID(@TableName), @ColumnName, 'ColumnId');
    SET @AlterTableStatement = N'ALTER TABLE ' + @TableName + N' DROP CONSTRAINT ' 
        + @ConstraintName + N'; ALTER TABLE ' + @TableName + N' ADD CONSTRAINT '
        + @ConstraintName + N' DEFAULT ' + @DefaultValue + N' FOR ' + @ColumnName;
    EXECUTE sp_executesql @AlterTableStatement;
END;

只需填写参数并执行脚本。该脚本将移除现有的约束,并创建一个具有指定默认值的新约束。这是所有与“如何更改列的默认值”相关问题的最佳答案。它考虑到存在默认值并且默认值可能具有系统生成的名称,可以进行脚本化,不依赖于手动观察/操作。

0
0 Comments

问题出现的原因是在使用Alter Table命令时,与Create Table命令之间的混淆。在Create Table中,可以同时添加默认值和默认约束,但是在Alter Table中,使用ALTER COLUMN无法添加约束。因此,需要编写两个不同的语句来分别更改列和添加默认约束。

解决方法如下:

1. 首先使用ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL;来更改列的属性。

2. 然后再使用ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;来添加默认约束。

希望这可以帮助你解决问题!

0