2011-07-25 12 views
3

C#経由でコードビハインドでGUIDを生成するASP.NETアプリケーションがあります。これらのGUIDは、次を経由して生成されます。SQL ServerのGUID

Guid id = Guid.NewGuid(); 

このGUIDは、後にSQL Server 2008のデータベースに格納されます。私はまた、そのレコードを更新するストアドプロシージャを持っています。私は、ASP.NETで生成されたものと同じフォーマットのストアドプロシージャ内にGUIDを生成したいと思います。

誰かがこれを行う方法を教えていただけますか?

ありがとうございました!

+0

「同じ形式で」とはどういう意味ですか? GUIDはバイナリ - 16バイトの系列です。 –

答えて

1

これは、クラスタ化インデックス(ほとんどの場合、主キー)のためであるならば、私は非常にNEWID()が真にランダムであること、その場合には断片化されたインデックスを作成し、以来(アップ上のSQL Server 2005の)NEWSEQUENTIALID()をお勧めします。

+1

そして 'newsequentialid()'は列のデフォルトの制約としてのみ指定できます。単に呼び出すことはできません。 –

+0

@Jesse非常に良いおすすめ – Behnam

7

使用NEWID()方法

DECLARE @ID uniqueidentifier 
SET @ID = NEWID() 
0

あなたはNEWID()を使用することができます。

ただし、このように生成されたインデックス作成ガイドには問題があります。代わりに、あなたはcomb algorithmを使用する必要があります。

CAST(CAST(NEWID() AS BINARY(10)) + 
    CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER) 

あなたがタイプUNIQUEIDENTIFIERの欄にこれらを格納しNVARCHARやソートのものに変換されていないことを確認してください。

0

私の推測では、GUIDをデータベースのテキスト(例:VARCHAR)フィールドに格納していると思いますが、この場合はuniqueidentifierタイプを使用する必要があります新しいGUIDを生成するには、NEWID() SQL関数を使用します。

GUIDをSQL Serverデータベースに格納する方法の詳細については、C# guid and SQL uniqueidentifierを参照してください。

0

インデックス作成のサポートを改善するためにNEWSEQUENTIALIDを使用できますが、この機能はデフォルト値の式としてのみ使用できます。新しく生成されたシーケンシャルIDにアクセスするために

INSERT INTO MyTABLE (...) OUTPUT inserted.GUIDCOLUMN INTO @tableVar VALUES (...) 

次のようなものを使用することができます。

関連する問題