sql – 更改列的默认值

我知道您可以更改现有列的认值,如 this
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDnes' FOR CityBorn;

但是根据this我的查询应该工作:

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

所以在这里我试图使我的列不为空,并设置认值.但是在CONSTRAINT附近收到Incoorect语法错误.我失踪了吗

解决方法

我认为这里的问题是Create Table和Alter Table命令之间的混淆.
如果我们查看Create table,那么我们可以在同一时间添加认值和认约束:
<column_deFinition> ::= 
column_name <data_type>
    [ FILESTREAM ]
    [ COLLATE collation_name ] 
    [ SPARSE ]
    [ NULL | NOT NULL ]
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression ] 
      | [ IDENTITY [ ( seed,increment ) ] [ NOT FOR REPLICATION ] 
    ]
    [ ROWGUIDCOL ]
    [ <column_constraint> [ ...n ] ] 
    [ <column_index> ]
 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 COLUMN,那么您不能添加
CONSTRAINT可用于ADD的选项有:

| ADD 
    { 
        <column_deFinition>
      | <computed_column_deFinition>
      | <table_constraint> 
      | <column_set_deFinition> 
    } [,...n ]

在这里查看:http://msdn.microsoft.com/en-in/library/ms190273.aspx

所以你必须编写两个不同的语句,用于改变列:

ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL;

一个用于更改表并添加认约束

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

希望这可以帮助!!!

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...