阿爾特列默認值
回答
我覺得這裏的問題是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