myślę kwestią jest tu z pomylenia Create Table
i Alter Table
poleceń. Jeśli spojrzymy na Create table
wtedy możemy dodać wartość domyślną i domyślne ograniczenie w tym samym czasie jak:
<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;
można sprawdzić kompletnej definicji tutaj: http://msdn.microsoft.com/en-IN/library/ms174979.aspx
ale jeśli spojrzymy na definicji Alter Table
następnie ALTER TABLE ALTER COLUMN
nie można dodawać CONSTRAINT
opcje dostępne dla ADD
są:
| ADD
{
<column_definition>
| <computed_column_definition>
| <table_constraint>
| <column_set_definition>
} [ ,...n ]
Sprawdź tutaj: http://msdn.microsoft.com/en-in/library/ms190273.aspx
Więc trzeba będzie napisać dwa różne oświadczenia jeden do zmiany kolumny jak:
ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL;
a drugi do zmiany tabeli i dodać domyślny ograniczenie
ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;
Mam nadzieję, że to pomoże !!!
Myślę, że potrzebujesz "ADD CONSTRAINT", jak w twoim pierwszym przykładzie. – Andrew