各テーブルの制約には、省略形、準省略形、および完全な形式があることがわかります (命名についてはご容赦ください。それらを正しく呼び出す方法の提案を歓迎します)。
例えば
省略形: 制約名は SQL Server によって定義されます。影響を受ける列は、定義されている列として暗示されます。
CREATE TABLE myTable
(
id int PRIMARY KEY,
)
準省略形: 明示的な制約名、暗黙の列
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()
半省略形
id int CONSTRAINT DF_ID DEFAULT newid()
ALTER TABLE
as 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
エラーあり
メッセージ 102、レベル 15、状態 1、行 5 'for' 付近の構文が正しくありません。
このエラーが発生する理由と、デフォルト制約の完全な定義を使用する方法を誰かが提案できますか?