FK制約の処理-SQL Server 2008 DBを空にして補充する

constraints foreign-keys sql sql-server-2008
FK制約の処理-SQL Server 2008 DBを空にして補充する

MS SQL Server 2008 R2にSQL DBがあります

開発の目的で、すべてのデータを消去しようとしています-その後、ダミーデータを追加します。

FK Constraintsとのいくつかの闘争の後、そして

ALTER TABLE ? NOCHECK CONSTRAINT ALL
DELETE FROM ?
ALTER TABLE ? CHECK CONSTRAINT ALL

データをクリアできました。

次に、ダミーデータを追加します。

3つのテーブル、 Country、` Address`、および Country_Address(住所を国にリンク)があるとします。

「国」と「住所」にデータを追加しました

しかし、 `Country_Address`に追加しようとすると:

” ” ‘

行は更新されませんでした。

行1のデータはコミットされませんでした。 エラーソース:.Net SqlClient Data Provider。 エラーメッセージ:INSERTステートメントがFOREIGN KEY制約と競合しました

” ” ‘

私がしているのは新しく追加された国と住所をリンクすることだけです-どちらも存在します-なぜそれがFK制約と競合するのですか?

グーグルから、これを修正するためにテーブルを再シードする必要があるかもしれないことが示唆されました。 まず、再シードの意味が100%確信できません。自動生成されたID列のリセットについて話していると思います。

「Country」または「Address」に新しいレコードを追加するときに、最後のレコードからインクリメントされたintを使用していることに気づきました(現在はなくなっています)。 400のIDから開始

データを追加するにはどうすればよいですか?

  1  0


ベストアンサー

CountryテーブルとAddressテーブルにID列があり、Country_Addressの値は他の2つのテーブルを参照するID値であるようです。 また、参照データの元の値を持つCountry_Addressのデータが既にあるようです。

したがって、再播種が解決策になる可能性があります。 テーブルは次のように見えると思います。

Country
-------
CountryID int identity(1, 1)
Country varchar(100)

Address
-------
AddressID int identity(1, 1)
Address varchar(100)
City varchar(100)

各テーブルのCountryID列とAddressID列を除き、再シード用にどの列が存在するかは厳密には関係ありません。 `identity(1、1)`プロパティは、1から始まり1ずつ増加する自動番号付けを示します。 したがって、CountryテーブルとAddressテーブルを再シードするには、CountryテーブルとAddressテーブルにデータを追加する前に次のことを実行できます。

DBCC CHECKIDENT ('Country', RESEED, 1)
DBCC CHECKIDENT ('Address', RESEED, 1)

identityプロパティを持つ列がない限り、Country_Addressのコマンドを実行する必要はおそらくないでしょう。

1


再シードとは、主キーの自動インクリメントIDをリセットすることです。 Management StudioまたはDDLステートメントを使用して、SQL Serverテーブルを再シードできます。 https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=406 [例]

テストしているのがテストの場合、外部キー制約を完全に削除して、邪魔にならないようにできることを忘れないでください。 テーブルにロードするデータが外部キーに正しく入力されていることを確認してください。

1


すべてのテーブルを空にする場合は、データベース構造のスクリプトを作成するのが最も簡単であり(これを行ってソース管理に正しく入れましたか?)、datbaseを削除して再作成します。 次に、スクリプトを実行してダミーデータを追加します。

1


`TRUNCATE TABLE table_name`テーブルを切り捨ててから、データを再挿入してください。

0


タイトルとURLをコピーしました