2012-04-26 6 views
3

私は1対多の多対多の関係を持つSQLデータベースを持っています。関係のほとんどは、自動増分フィールド "ID"に基づいています。場合によっては、テーブルの行を削除するときに、複数のテーブルのすべてのデータをXMLファイルにエクスポートしてから、このデータを後で復元する必要がある場合にデータベースからデータを削除します。イベント行の主キーを保持する必要があります

データベースIDはどのように扱われますか?データを既存のデータベースに復元するだけで、IDと関係はそのまま残っていますか?

アドバイスをいただければ幸いです。

答えて

1

あなたは、あなたがINSERT文で、IDなどの分野のすべてを指定する必要があります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 

注意を使用して、でもIDENTITYフィールドに、データを再挿入することができます。


あなたは主キーを持つレコードを再作成したら、あなたは外部キーとしてそれらを使用したテーブル内のレコードを再作成することができます。

1

短い回答:はい。 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 

注意を、あなたが前に「1」テーブルにデータを再挿入する必要があります任意の外部キー関係を満足させるために'多くの'テーブル。

関連する問題