1対多および多対多の関係を持つSQLデータベースがあります。ほとんどの関係は、自動インクリメントフィールド「ID」に基づいています。テーブルの行が削除される場合、このデータを後日復元する必要がある場合に備えて、データベースからデータを削除する前に、複数のテーブルのすべてのデータをXMLファイルにエクスポートすることがあります。
データベースIDはどのように扱われますか?データを既存のデータベースに復元するだけで、IDと関係はそのまま残りますか?
何かアドバイスをいただければ幸いです。
1対多および多対多の関係を持つSQLデータベースがあります。ほとんどの関係は、自動インクリメントフィールド「ID」に基づいています。テーブルの行が削除される場合、このデータを後日復元する必要がある場合に備えて、データベースからデータを削除する前に、複数のテーブルのすべてのデータをXMLファイルにエクスポートすることがあります。
データベースIDはどのように扱われますか?データを既存のデータベースに復元するだけで、IDと関係はそのまま残りますか?
何かアドバイスをいただければ幸いです。
使用する場合は、IDENTITYフィールドにもデータを再挿入できます。SET IDENTITY_INSERT [table] ON
SET IDENTITY_INSERT yourTable ON
INSERT INTO
yourTable (
id,
field1,
field2
)
SELECT
id,
field1,
field2
FROM
yourBackup
SET IDENTITY_INSERT yourTable OFF
INSERTステートメントでは、IDを含むすべてのフィールドを指定する必要があることに注意してください。
主キーを使用してレコードを再作成したら、それらを外部キーとして使用するテーブルにレコードを再作成できます。
簡単な答え:はい。SQL Serverには、各テーブルに対して設定されたフラグがあり、ID列の値の指定が許可されているかどうかを示します。デフォルトではオフになっています。データを再挿入するときに、一時的に有効にする必要があります。
DECLARE @Id int
DECLARE @Name varchar(20) = 'Dave'
INSERT INTO Example(Name) VALUES(@Name)
SET @Id = SCOPE_IDENTITY()
DELETE FROM Example WHERE Id = @Id
SET IDENTITY_INSERT Example ON
INSERT INTO Example(Id, Name) VALUES(@Id, @Name)
SET IDENTITY_INSERT Example OFF
外部キーの関係を満たすには、「many」テーブルの前の「one」テーブルにデータを再挿入する必要があることに注意してください。