GUIを使用する代わりにコードを記述して、Microsoft SQL Server 2000で新しいテーブルを作成しています。「手動で」行う方法を学習しようとしています。
これは私が実際に使用しているコードであり、正常に動作します。
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE())
)
主キー、外部キー、およびチェック制約を独自に指定したのは、この方法でそれらの名前を定義できるからです。そうしないと、それらをインラインで宣言すると、SQL Serverがランダムな名前を生成してしまい、「好き」ではありません。
デフォルト値の制約を宣言しようとしたときに問題が発生しました。インターネット上の情報とMicrosoft SLQ Server Management Studioがそれを作成する方法を見ると、インラインとそれ自体の両方で作成できることがわかりました。
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
または
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
インラインメソッドは正常に機能しますが、通常は制約に対してランダムな名前を生成しますIncorrect syntax near 'FOR'.
。スタンドアロンメソッドはエラーをスローし、と言います。
また、テーブルを作成してからそれを実行ALTER
すると、コマンドは機能します。
ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
参考までに、私が実行しようとしている完全なコードは次のとおりです。
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE()),
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
)
私はここで完全に迷っています、私が不可能にしようとしていること、または何か間違っているのですか?
編集:
David Mは、インライン構文を使用して名前付きのデフォルト制約を追加する方法を示しましたが、スタンドアロン構文が完全に間違っているのか、それとも私のせいなのかを理解しようとしています。