阿尔特列默认值
回答
我觉得这里的问题是Create Table
和Alter 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;
您可以检查完整的定义在这里: 如果我们看一下Create table
那么我们可以在同一时间添加一个默认值和默认约束 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 ]
检查这里: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;
希望这有助于!
当场。如果我正确理解Microsoft需要更新其内容:http://msdn.microsoft.com/en-us/library/ms187742%28v=sql.110%29.aspx – SZT 2014-09-12 17:14:53
否..如果您正确阅读第一行那么它'指定通过使用ALTER TABLE将**添加到表的列的属性。所以你总是可以写下如下内容:'ALTER TABLE ** ADD ** COLUMN .. CONSTRAINT .. DEFAULT; ' – Deepshikha 2014-09-12 17:27:13
你再次右转:)微软需要把这些星星围绕“增加”haha – SZT 2014-09-16 19:31:59
对于改变现有列,你需要:
ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL;
ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;
从MSDN ALTER TABLE例子:
D.添加默认约束现有列
以下示例创建一个包含两列的表格,并将值插入第一列,而另一列仍为NULL。 A DEFAULT约束被添加到第二列。要验证是否应用了默认值,将在第一列中插入另一个值,并查询该表。
CREATE TABLE dbo.doc_exz (column_a INT, column_b INT) ;
GO
INSERT INTO dbo.doc_exz (column_a)VALUES (7) ;
GO
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
DEFAULT 50 FOR column_b ;
GO
INSERT INTO dbo.doc_exz (column_a) VALUES (10) ;
GO
SELECT * FROM dbo.doc_exz ;
GO
DROP TABLE dbo.doc_exz ;
GO
因此,在短期,你需要的ADD CONSTRAINT
ALTER TABLE MyTable
ALTER COLUMN CreateDate DATETIME NOT NULL ;
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;
有更改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 '[email protected]+' DROP CONSTRAINT '[email protected] +'; ALTER TABLE '+ @table
+ ' ADD CONSTRAINT ' + @constraintName +' DEFAULT '[email protected]+' FOR '[email protected]
EXECUTE sp_executesql @constraintQuery
END
只需填写参数和执行。该脚本删除现有约束并创建一个具有指定默认值的新约束。
这是所有与'如何更改列'的问题的最佳答案默认值'?它考虑到存在一个现有的默认值,并且该默认值可能具有系统生成的名称,并且可以编写脚本并且不依赖于手动观察/操作。 – mickeyf 2017-09-11 15:03:33
- 1. 阿尔特价值ExtJS的
- 2. 尔康selectStatic默认值
- 3. 阿尔特性质
- 4. 阿尔特表添加列和约束
- 5. 阿尔特自动生成序列
- 6. 无法将默认布尔参数设置为默认值
- 7. 阿尔特情况下sentivity
- 8. Mysql的阿尔特毛刺
- 9. 阿尔特file.show()行为
- 10. PostgreSQL的 - 布尔值列添加到表中设定的默认
- 11. 在MySQL中创建布尔列,默认值为false?
- 12. MySQL函数列默认值
- 13. 文本列的默认值
- 14. 引导 - 列默认值
- 15. 列表框默认值
- 16. Sharepoint 2007 DateTime列默认值?
- 17. 下拉列表默认值
- 18. 春天JPA列默认值
- 19. 更改列的默认值
- 20. 默认值选择列表
- 21. sqlite3更改列默认值
- 22. 默认均匀(阵列)值
- 23. WPF Datagrid列的默认值
- 24. 改变列的默认值
- 25. 选择具有空值或“默认”值的特定列的行
- 26. Python3 - 默认值为type的默认值?
- 27. JLabel的阿尔法值
- 28. 反转阿尔法值java
- 29. 夫特 - 嵌套枚举默认值
- 30. RAML特征参数默认值
我想你需要'ADD CONSTRAINT',就像你的第一个例子。 – Andrew 2014-09-12 16:02:57