首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改列默认值

问更改列默认值
EN

Stack Overflow用户
提问于 2014-09-13 00:00:52
回答 5查看 104.5K关注 0票数 29

我知道您可以更改现有列的默认值,如下所示this:

代码语言:javascript
复制
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;

但根据this我的查询应该是有效的:

代码语言:javascript
复制
ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL 
      CONSTRAINT DF_Constraint DEFAULT GetDate()

所以在这里,我试图让我的列不为Null,并设置默认值。但是在约束附近获得Incoorect语法错误。我错过了什么吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-09-13 01:02:42

我认为这里的问题在于Create Table和Alter Table

命令。如果我们看一下Create table然后,我们可以同时添加一个默认值和缺省约束,如下所示:

代码语言:javascript
复制
::= 
column_name 
    [ FILESTREAM ]
    [ COLLATE collation_name ] 
    [ SPARSE ]
    [ NULL | NOT NULL ]
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression ] 
      | [ IDENTITY [ ( seed,increment ) ] [ NOT FOR REPLICATION ] 
    ]
    [ ROWGUIDCOL ]
    [  [ ...n ] ] 
    [  ]
 ex: 
CREATE TABLE dbo.Employee 
(
     CreateDate datetime NOT NULL 
     CONSTRAINT DF_Constraint DEFAULT (getdate())
) 
ON PRIMARY;

您可以在此处检查完整的定义:http://msdn.microsoft.com/en-IN/library/ms174979.aspx

但是如果我们看一下Alter Table定义,然后使用ALTER TABLE ALTER COLUMN您不能添加CONSTRAINT可用于的选项ADD包括:

代码语言:javascript
复制
| ADD 
    { 
        
      | 
      |  
      |  
    } [ ,...n ]

请查看此处:http://msdn.microsoft.com/en-in/library/ms190273.aspx

因此,您必须编写两个不同的语句,其中一个用于将列更改为:

代码语言:javascript
复制
ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL;

另一个用于更改表和添加缺省约束

ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;

希望这能有所帮助!

票数 20
EN

Stack Overflow用户

发布于 2015-07-08 05:20:21

在SQL server中,没有直接更改列的默认值的方法,但以下参数化脚本可以完成此工作:

代码语言:javascript
复制
DECLARE @table NVARCHAR(100);
DECLARE @column NVARCHAR(100);
DECLARE @newDefault NVARCHAR(100);
SET @table = N'TableName';
SET @column = N'ColumnName';
SET @newDefault = N'0';

IF EXISTS (
    SELECT   name
    FROM     sys.default_constraints
    WHERE    parent_object_id = OBJECT_ID(@table)
    AND      parent_column_id = COLUMNPROPERTY(OBJECT_ID(@table), @column, 'ColumnId')
)
BEGIN
    DECLARE @constraintName AS NVARCHAR(200);
    DECLARE @constraintQuery AS NVARCHAR(2000);

    SELECT  @constraintName = name
    FROM    sys.default_constraints
    WHERE   parent_object_id = OBJECT_ID(@table)
    AND parent_column_id = COLUMNPROPERTY(OBJECT_ID(@table), @column, 'ColumnId');

    SET @constraintQuery = N'ALTER TABLE ' + @table + N' DROP CONSTRAINT '
        + @constraintName + N'; ALTER TABLE ' + @table + N' ADD CONSTRAINT '
        + @constraintName + N' DEFAULT ' + @newDefault + N' FOR ' + @column;

    EXECUTE sp_executesql @constraintQuery;
END;

只需填充参数并执行即可。该脚本删除现有约束并使用指定的默认值创建一个新约束。

票数 9
EN

Stack Overflow用户

发布于 2014-09-13 00:12:18

要更改现有列,您需要:

代码语言:javascript
复制
ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL;
ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25812331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档