2010-12-14 17 views
26

疲れた質問のように聞こえるのはお詫びしますが、私が読んだフォーラムの回答やドキュメントは適切な答えを提供していないようです。MS SQL Serverの行GUID列

MS SQL Server 2008のRow GUID Columnプロパティの目的は何ですか?

私はそれを拡張しましょう。私はこの質問の答えとして「PKとしてGUIDを使用しないでください」と繰り返しましたが、私にとってはまったく無関係なようです。を設定すると、そのGUID列がプライマリキーか何かに強制されますか?

私の元の質問を言い換えると:インデックスに何の役割も果たさないテーブルにGUID列がある場合、そのGUID列を設定することから何かを得るためには、Row GUID Column

答えて

33

これにより、列名の代わりに$ ROWGUID変数を使用することができます。 これは主にマージレプリケーションに使用されます。 これはPKのGUID列を強制しません.PKを明示的に宣言することしかできません。 マージレプリケーションの実装を計画している場合を除き、最後の質問に対する答えは「いいえ」です。

+0

明快で簡潔でありがとう皆さんありがとうございます。_ _私はこの質問に対する答えが見つからないことに徹底的に驚いています他の場所では(むしろ、他のフォーラムでの有効な回答に関連していないすべての議論が雲に覆われているように見えます)助けてくれてありがとう! – instantmusic

+1

ニース。また、SQL Server 2012以降、[FILESTREAM](https://msdn.microsoft.com/en-us/library/gg471497.aspx)の機能:-)にも使用されています。 –

1

RowGUID列はレプリケーションに使用されます。これにより、レプリケーションエンジンが正しくマージされます。レプリケーションが有効な場合、この列はRowGUID列がまだない表に追加されます。

レプリケーションを実装する予定がない限り、これを使用して何も得られません。これは、列のデフォルト値としてnewsequentialid()を設定することに相当します。

0

これはプライマリキーである必要はなく、プロパティはフィールドが自動的に更新されるかどうかを判断するだけです。アプリケーションでGUIDを作成して送信する場合は、このプロパティをfalseに設定します。それ以外の場合はtrueに設定し、データベースに自動的に作成させます。フィールドがクラスタード・インデックスの場合は、デフォルト値がNEWSEQUENTIALID()であることを確認してください。

7

ROWGUIDCOLUMNは、主に複数のサテライトデータベースのテーブルの内容を1つの中央DBに結合する必要があるレプリケーションシナリオで使用されます。

レプリケートするテーブルにROWGUIDCOLUMNを追加すると、レプリケーションエンジンはROWGUIDCOLUMNフィールドを使用して、同じプライマリキー値を持つレコードを区別できます。

これは主にスムーズなレプリケーションを実現するために使用される機能なので、この列を主キーとして使用しないでください。主キーは、管理下にあり、選択したDBエンジンの特定の機能の動作特性に影響を与えない論理的なビジネスエンティティでなければなりません。

+0

華麗な説明! –

+0

多くのありがとう。それは意味があるとうれしいです:) –

+0

Rich(と@Jeffrey):レプリケーションエンジンがROWGUIDCOLUMNフィールドを使用して同じプライマリキー値を持つレコードを区別できる「ROWGUIDCOL」_ensure_ "として列をマークするとどうなりますか?一意?はい、デフォルトでは、値はほぼ常に一意ですが、一意のインデックス/制約を追加する以外は重複値を手動で追加することはできません。 –

0

いいえPKとして強制しません。 2番目のuniqueidentifierを作成して、それを行GUID列として指定することはできません。