1

まず、私の英語で申し訳ありません。この質問に対する答えを見つけようとしましたが、自分を表現する方法がわかりません。

重複している場合は、閉じて回答をお知らせください。

顧客のショッピング カートの各アイテムのデータを格納するテーブルがあります。構造は次のとおりです。

テーブル - tmpShoppingCartItem

tmpShoppingCart_ID  int FK from tmpShoppingCart
ID                  int PK, Ident 1,1
StoreSKU_ID         int FK from StoreSku
Quantity            int 
Enabled             bit 

IDはシード = 1 の ID です。しかし、データの挿入を開始すると、次のようになります。

tmpShoppingCart_ID        ID          ....
1                         1
1                         2
1                         3
1                         4

ここまでは問題ありませんが、新しいショッピング カートの場合は次のようになります。

tmpShoppingCart_ID        ID          ....
2                         5
2                         6
3                         7
4                         8

ID 列はまだ 1 をシードしています。

tmpShoppingCart_ID次のような変更があったときにシード カウンターをリセットできるかどうか (およびその方法) を知りたいです。

tmpShoppingCart_ID        ID          ....
1                         1
1                         2
1                         3
1                         4
2                         1
2                         2
3                         1
3                         2
3                         3
3                         4
3                         5
4                         1

御時間ありがとうございます。

4

2 に答える 2

3

ID 列を主キーとして使用する場合は、連続している必要があり、テーブル内で繰り返されないようにする必要があります。まず、重複を防ぐために、temShoppingCart_ID と ID の両方を一意の PK にする必要があります。第 2 に、IDENTITY 関数を使用することはできませんが、特定の tempShoppingCart_ID に挿入された各行のアプリケーションでカウンターを使用できます。

私の意見では、現在のように ID を ID 列として保持してください。LineID という 2 番目の列を追加し、レコードごとにインクリメントします。

于 2013-05-28T18:25:29.280 に答える
2

自動増分フィールドではそれを行うことはできません。これを行いたい場合は、作成したプロセスに基づいてフィールドにデータを入力するトリガーを作成する必要があります。プロセスには、複数の行の挿入が含まれ、競合状態を処理できることを確認する必要があります。なぜこれをしたいのですか?顧客がショッピング カート ID を再注文できるようにする予定はありますか。ID を見る必要はないので、最初の ID が 1 か 7 かは問題ではありません。

DBCC CHECKIDENT ([Table_Name], RESEED, 0) は技術的には機能する可能性がありますが、ユーザーが sys_admin、db_owner、または db_ddladmin である必要があることを指摘しておきます。これらはいずれも、アプリケーションからログインしてデータ入力を行うユーザーに割り当てる必要のあるロールではありません。

于 2013-05-28T18:25:16.800 に答える