0

以前はテーブルが 1 つしかありませんでした (もっとたくさんありますが、これらは私が苦労しているものです)、それがUNIVERSITYテーブルでした。

ここで、さらに 2 つのテーブルを作成したいと思います:STATECITY.

テーブル属性

UNIVERSITY: ID, NAME, SHORTNAME, FK_STATE, FK_CITY

STATE: ID, NAME, SHORTNAME

CITY : ID, NAME

問題

大学 (この大学が存在する市と州を含む) の Excel シートを解析しています。この情報をすべて記憶にとどめると、最も難しい部分がやってきます。

方法:

州と都市を含むすべての大学をデータベースに挿入しますが、大学の FK を正しく設定するために、州と都市のデータベースに ID を照会します。

例:
「PUC-RIO」という名前の大学を追加すると、「RIO DE JANEIRO」(市) 「RIO DE JANEIRO」(州も) で表示されます。大学自体を追加することは問題ではありませんが、その外部キーを州と市のテーブルの「RIO DE JANEIRO」キーに更新するにはどうすればよいですか?

4

3 に答える 3

2

大学ごとにこれを行う必要があります。

INSERT INTO UNIVERSITY (..., FK_CITY, FK_STATE)
VALUES (..., (SELECT ID FROM CITY WHERE Name = @city), (SELECT ID FROM STATE WHERE Name = @state))
于 2012-06-05T13:13:45.847 に答える
2

外部キー関係を宣言しているときに、関係のテーブルを指定するダイアログ ボックスが表示されます。

更新ルール

デフォルトでは、更新ルールは No Action に設定されています。msdn の記事によると、テーブルの外部キーを指定する際に変更できるオプションがいくつかあります。

 Update Rule

ユーザーが外部キー関係に関係するデータで行を更新しようとした場合の動作を指定します。

1.アクションなし更新が許可されておらず、UPDATE がロールバックされることを示すエラー メッセージがユーザーに表示されます。

  1. カスケード外部キー関係に関係するデータを含むすべての行を更新します。テーブルが論理レコードを使用するマージ パブリケーションに含まれる場合は、CASCADE を指定しないでください。論理レコードの詳細については、

  2. Set Nullテーブルのすべての外部キー列が null 値を受け入れることができる場合、値を null に設定します。SQL Server 2005 のみに適用されます。

  3. Set Default テーブルのすべての外部キー列にデフォルトが定義されている場合、列に定義されているデフォルト値に値を設定します。SQL Server 2005 のみに適用されます。

問題の解決に役立つ可能性のあるこれらのオプションを調べることができます。MSDN の記事ドキュメントを参照してください

于 2012-06-05T13:11:11.733 に答える
0

残念ながら、少なくとも自動化された方法では、上記のテーブル定義を与えることはできません。University テーブルには、それを City および State テーブルに関連付ける何かが必要です。私の理解が正しければ、University テーブルに CityName 列と StateName 列を一時的に含める必要があり、名前フィールド間で結合を行うことができます。

UPDATE U
    SET FK_CITY = C.ID
FROM UNIVERSITY AS U
    JOIN CITY AS C
        ON U.CITYNAME = C.NAME

それ以外の場合は、FK を検索して、新しい大学を追加するときに手動で追加する必要があります。また、City テーブルに FK_State がある方が簡単かもしれません。そうすれば、大学のテーブルに都市の ID を追加するだけで済みます。

于 2012-06-05T13:14:13.390 に答える