2017-09-13 3 views
0

私の現在のプロジェクトでは、複数のクライアントデータベースを1つのサーバーデータベースに同期する必要があります。私はMicrosoftの同期フレームワークで試してみたが、私の場合は役に立たない。そのため私は手動で同期を行う必要があります。そのために私は主キー制約から to guidすべてのテーブルを変更する必要があります。主キーをintからGuidに移動する

問題は、この主キーは他のテーブルの外部キーとも呼ばれます。 私はSQLが得意ではないです、以下

Moving from ints to GUIDs as primary keys

を参照していました。私はその論理を理解しましたが、実際の実装は私にとって非常に困難です。

ALTER TABLE MyTable 
ADD GuidCol NVARCHAR(50) NOT NULL, 
CONSTRAINT AK_GuidCol UNIQUE(GuidCol) 

上記のコード私は多くのグーグルグーグルの後でユニークな列として列GuidColを追加しようとしました。しかし、 私は知らないどのようにして新しく作成された列に値を入力できますか? 値を割り当てた後に、この列をPKとして作成するにはどうすればよいですか? このプロセスで既存の外部キー制約が破られないようにする方法を教えてください。

+0

外部キーの種類とは何が関係していますか?間違った問題に対処しようとしている可能性があります。 –

+0

手動同期では外部キーを使用しません。しかし、ここで私は新しい一意のGUID列を追加しようとしています。この列をPKにしたいので、すべての外部キーテーブルを更新する必要があります。例えば。 PKが1、GUIDがGならば、FKが1からGまでの他のテーブルのエントリを変更する必要があります。私はあなたが私が言うことを得ることを願っています。 – sachin

答えて

0

新しく作成された列に値を入力するにはどうすればよいですか?

は、マスター表のGUID値のための新しい列を作成します。

あなたが提供されるリンクは、ソリューションを提供します。 uniqueidentifierデータ型をnewid() のデフォルト値でnullにしないようにして、既存のすべての行に値が設定されるようにします。

だからあなたのコードは次のようになります。

alter table myTable add GuidCol uniqueidentifier not null default newid() 

にはどうすれば値(複数可)を割り当てた後、PKとして、この列を作ることができますか?どのように このプロセスが既存の外部キー の制約を壊さないことを確認しますか?

同じ答えがわかります:

  • 子テーブルに新しいのuniqueidentifier列を作成します。
  • 既存のint関係を使用してエンティティを参照するために、更新ステートメントを実行してギルド関係を構築します。
  • 元のint列を削除します。

はpreviuosの文と同じuniqueidentifierタイプを使用して、代わりにdefalutを提供する、既存の整数id上のテーブルを結合する更新ステートメントを実行して、子供の列に対応する親の値を設定します。 子と親の関係は確立されていますが、制約はありません。 int列を削除し、新しい​​列にPKとFKを作成

関連する問題