发布于 2014-09-13 01:02:42
我认为这里的问题在于Create Table和Alter Table
命令。如果我们看一下Create table然后,我们可以同时添加一个默认值和缺省约束,如下所示:
::=
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包括:
| ADD
{
|
|
|
} [ ,...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;
希望这能有所帮助!
发布于 2015-07-08 05:20:21
在SQL server中,没有直接更改列的默认值的方法,但以下参数化脚本可以完成此工作:
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;只需填充参数并执行即可。该脚本删除现有约束并使用指定的默认值创建一个新约束。
发布于 2014-09-13 00:12:18
要更改现有列,您需要:
ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL;
ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;https://stackoverflow.com/questions/25812331
复制相似问题