254

SQL Serverのオブジェクト作成コードを「手動でコーディング」したことは一度もありません。外部キーのデクレレーションは、SQLServerとPostgresで一見異なります。これまでの私のSQLは次のとおりです。

drop table exams;
drop table question_bank;
drop table anwser_bank;

create table exams
(
    exam_id uniqueidentifier primary key,
    exam_name varchar(50),
);
create table question_bank
(
    question_id uniqueidentifier primary key,
    question_exam_id uniqueidentifier not null,
    question_text varchar(1024) not null,
    question_point_value decimal,
    constraint question_exam_id foreign key references exams(exam_id)
);
create table anwser_bank
(
    anwser_id           uniqueidentifier primary key,
    anwser_question_id  uniqueidentifier,
    anwser_text         varchar(1024),
    anwser_is_correct   bit
);

クエリを実行すると、次のエラーが発生します。

メッセージ8139、レベル16、状態0、9行目外部キーの参照列の数が、参照列の数、テーブル'question_bank'と異なります。

エラーを見つけることができますか?

4

11 に答える 11

338

また、独自に制約を作成する場合は、ALTERTABLEを使用できます。

alter table MyTable
add constraint MyTable_MyColumn_FK FOREIGN KEY ( MyColumn ) references MyOtherTable(PKColumn)

自分の制約に名前を付けたいという理由だけで、インライン作成にSaraChippsが言及した構文はお勧めしません。

于 2008-09-07T23:14:56.343 に答える
206
create table question_bank
(
    question_id uniqueidentifier primary key,
    question_exam_id uniqueidentifier not null,
    question_text varchar(1024) not null,
    question_point_value decimal,
    constraint fk_questionbank_exams foreign key (question_exam_id) references exams (exam_id)
);
于 2008-09-07T20:57:59.120 に答える
70

次を使用して、外部キー制約に名前を付けることもできます。

CONSTRAINT your_name_here FOREIGN KEY (question_exam_id) REFERENCES EXAMS (exam_id)
于 2008-09-07T22:12:57.443 に答える
14
create table question_bank
(
    question_id uniqueidentifier primary key,
    question_exam_id uniqueidentifier not null constraint fk_exam_id foreign key references exams(exam_id),
    question_text varchar(1024) not null,
    question_point_value decimal
);

――それもいけますね。おそらくもう少し直感的な構造ですか?

于 2011-06-09T18:15:54.957 に答える
5

あなたのように、私は通常手動で外部キーを作成しませんが、何らかの理由でスクリプトが必要な場合は、通常、ms sql server management studio を使用して作成し、変更を保存する前に、テーブル デザイナー | を選択します。変更スクリプトの生成

于 2008-09-09T16:59:47.850 に答える