私はこのテーブルを持っている:Guid/uniqueidentifierでデフォルトのNEWID()/ NEWSEQUENTIALID()を使用するにはどうすればよいですか?
CREATE TABLE [dbo].[SandTable](
[Id] [uniqueidentifier] NOT NULL,
[Date] [date] NULL,
CONSTRAINT [PK_SandTable] PRIMARY KEY)
ALTER TABLE [dbo].[SandTable] ADD CONSTRAINT [DF_SandTable_Id] DEFAULT (NEWID()) FOR [Id]
質問NEWSEQUENTIALID(対NEWIDを())を使用しての話ではありません。
linqPadを使用してテーブルをテストします。
SandTables.InsertOnSubmit(new SandTable
{
// I don't provide any value for Id
Date = DateTime.Now
});
SubmitChanges();
私の最初のアイデアにはIDが提供されていないときの値に自分自身を初期化することができますが、1つが設けられている場合に提供されたIDを使用しますId列を作成することでした。
しかし、Guidは構造体であり、Idでないクラスであるため、Idはデフォルト値(00000000-0000-0000-0000-000000000000
)に初期化されます。したがって、SQLサーバーは、Idは常に値を持ち、NEWID()のデフォルトの命令は決して呼び出されないと考えます。
NEWID()を特定の値で強制的に呼び出すことはできますか? Idの値を評価するためにトリガーを使用し、それが(00000000-0000-0000-0000-000000000000
)のときにNEWID()を呼び出す必要がありますか?解決策または回避策は何ですか?あなたがチェック制約でそれを行うことができます
は、興味深い類似し質問ですが、私の具体的な質問に応答していない:おそらくhttps://stackoverflow.com/q/11974939/196526 –
あなたが挿入しようとしていることがわかっているなら、id = Guid.NewGuid()でコードにGUIDを作成してみてはどうでしょうか?あなたはそれを作成するSQLをしたいので? –
また、オプションを挿入するためのストアドプロシージャを使用していますか?それでは、GUIDが空であるかどうかをチェックし、新しいGUIDがあればそれを生成し、挿入を実行することができます。 –