Для каждого табличного ограничения, я вижу, что есть сокращенная форма, пол-сокращенная форма и полная форма (Пардон за именование. Предложения о том, как правильно называть их радушны)DEFAULT CONSTRAINT полной форма
Например
сокращенном виде: пусть имя ограничения быть определена с помощью SQL Server, столбец быть затронуты подразумевается, как столбец определяется
CREATE TABLE myTable
(
id int PRIMARY KEY,
)
Semi-сокращенная форма: явное имя ограничения, подразумеваемые столбец
id int CONSTRAINT PK_ID PRIMARY KEY,
Полная форма: как явные. Разрешить определение в конце отделено от определения столбца
id int,
Name varchar(40),
CONSTRAINT PK_ID PRIMARY KEY(id)
Из того, что я вижу, полная форма часто рассматривается в ALTER TABLE
, где ограничения определены позже.
Для DEFAULT
ограничение
форма Короткие руки
id int DEFAULT newid()
Semi-сокращенная форма
id int CONSTRAINT DF_ID DEFAULT newid()
Я вижу использование полной формы в ALTER TABLE
как here
ALTER TABLE [dbo].[Customers] WITH NOCHECK ADD
CONSTRAINT [DF__Customers__cust___151B244E]
DEFAULT ('new customer') FOR [cust_name],
CONSTRAINT [def_last_updated_by] DEFAULT
(suser_sname()) FOR [last_updated_by],
PRIMARY KEY CLUSTERED
([cust_id]) ON [PRIMARY]
GO
Однако определение полной формы при создании таблицы не удается
CREATE TABLE testGUIDs
(
ID uniqueidentifier,
Name varchar(40),
CONSTRAINT DF_ID DEFAULT newid() FOR [ID]
)
GO
с ошибкой
Msg 102, Level 15, State 1, Line 5 Неправильный синтаксис около 'для'.
Может ли кто-нибудь предложить, почему возникает эта ошибка, и как использовать полноразмерное определение ограничения по умолчанию?