現在、テーブルがあります。Messages
です。 ID
列は主キーであり、IDを使用して設定されます。プライマリキーIDを次のAUTO_INCREMENT値で始まるシーケンスに置き換えます。
x-----------------------------x
| ID | Contents |
x-------------|---------------x
| 1 ||
| 2 | 56789 |
x-----------------------------x
私はID
列にIDを削除し、Messages_ID_Sequence
、シーケンスからID
のデフォルト値を取り込むことで、それを交換したいです。
これはSSDTで達成するのは簡単です。しかし、私は、データベースプロジェクトを展開するときに、Messages_ID_Sequence
の最初の値が、私はMessages_ID_Sequence
のために生成されたSQLを見たときに、なぜそれは明らかだ1です:私は、新しいメッセージレコードを挿入しようとすると、
CREATE SEQUENCE [dbo].[CommandMsgs_MSGID_Sequence]
AS BIGINT
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE 10
問題が起こります。シーケンス1の最初の値は、新しいレコードのID列に値を設定し、主キー制約に違反します。
したがって、Messages_ID_Sequence
が作成されたときに、そのID番号が提供された次のID
で始まるようにするにはどうすればよいですか? Messages_ID_Sequence
の作成スクリプトのビルドアクションは、ビルドに設定する必要があります。そのため、SSDTが理解できないものはソリューションに含まれません。
いつ実行すればよいですか?デプロイメント後のスクリプトとして?デプロイ後のスクリプトに追加された場合、データベースを公開するたびに実行されます。それは必ずしも有害ではないように見えますが、環境ごとに1回だけ行う必要があることを考えると無駄です。 –
シーケンスの作成直後に、展開スクリプトで実行することができます。 –
答えを更新したので、シーケンスを直接作成するので、データベースを更新するときに一度だけ呼び出す必要があります。 –