SZT*_*SZT 22 sql sql-server default-value notnull
我知道您可以更改现有列的默认值,如下所示:
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
Run Code Online (Sandbox Code Playgroud)
但根据这个我的查询应该工作:
ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL
CONSTRAINT DF_Constraint DEFAULT GetDate()
Run Code Online (Sandbox Code Playgroud)
所以我在这里尝试使我的列不为Null并设置默认值.但在CONSTRAINT附近获取Incoorect语法错误.我错过了吗?
Dee*_*kha 10
我觉得这里的问题是与之间的混乱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;
Run Code Online (Sandbox Code Playgroud)
你可以在这里检查完整的定义:http: //msdn.microsoft.com/en-IN/library/ms174979.aspx
但是如果我们看一下Alter Table定义那么ALTER TABLE ALTER COLUMN你就无法添加
CONSTRAINT可用的选项ADD:
| ADD
{
<column_definition>
| <computed_column_definition>
| <table_constraint>
| <column_set_definition>
} [ ,...n ]
Run Code Online (Sandbox Code Playgroud)
请点击此处:http://msdn.microsoft.com/en-in/library/ms190273.aspx
因此,您必须为Altering列编写两个不同的语句:
ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL;
Run Code Online (Sandbox Code Playgroud)
另一个用于更改表并添加默认约束
ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;
希望这可以帮助!!!
要更改现有列,您需要:
ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL;
ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;
Run Code Online (Sandbox Code Playgroud)
小智 6
没有直接的方法可以更改SQL Server中列的默认值,但是以下参数化脚本可以完成此工作:
DECLARE @table nvarchar(100)
DECLARE @column nvarchar(100)
DECLARE @newDefault nvarchar(100)
SET @table='TableName'
SET @column='ColumnName'
SET @newDefault='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 = 'ALTER TABLE '+@table+' DROP CONSTRAINT '+@constraintName +'; ALTER TABLE '+ @table
+ ' ADD CONSTRAINT ' + @constraintName +' DEFAULT '+@newDefault+' FOR '+@column
EXECUTE sp_executesql @constraintQuery
END
Run Code Online (Sandbox Code Playgroud)
只需填写参数并执行即可。该脚本将删除现有约束,并使用指定的默认值创建一个新约束。
它应该是 -
ALTER TABLE MyTable
ALTER COLUMN CreateDate DATETIME NOT NULL;
ALTER TABLE MyTable
ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;
Run Code Online (Sandbox Code Playgroud)