0

問題のデバッグに 1 日を費やしましたが、問題がずっと続いていたことがわかりました。テーブルに、一意の値のみをカタログ番号として強制する一意の制約があります。しかし、私はこの場合に何がユニークであるかをよく理解していないようです. MP1156MP1156ZFの 2 つの製品番号があります。

Insert into IDWProductCodes( PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID)
   Select 
      '11232', '23223', 'MP115BP', 1, 0, 0, '267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C'

Insert into IDWProductCodes( PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID)
   Select 
      '11232', '23223', 'MP115', 1, 0, 1, '267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C'

Insert into IDWProductCodes( PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID)
   Select
      '11232', '23223', 'MP15', 1, 1, 1, '267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C'

エラーが発生します:

メッセージ 2627、レベル 14、状態 1、行 5
UNIQUE KEY 制約 'UK_CNUMUNIQUE' の違反。オブジェクト 'dbo.IDWProductCodes' に重複するキーを挿入できません。重複キーの値は (MP115) です。

最初のキーを挿入してから2番目のキーを挿入しようとするたびに、SQLはそれらが同じであると想定し、最初のキーを2番目のキーで上書きします。これはまったく望ましくない効果です。

私が本当に欲しいのは、テーブルに異なる文字列 (重複なし) を入力できることです。一意の制約で十分だと思っていましたが、今はわかりません。この問題を解決するためのより良い、または最良のアプローチは何ですか?

4

2 に答える 2

0

あなたは何が起こっているのか誤解していると思います。重複を挿入しようとしても、SQLの一意性制約によって既存の行が上書きされることはありません。制約に違反する2番目の挿入は失敗します。

インサートとテーブル構造に使用しているコードを示してください。私はそれを見た後、実際の問題に対処するためにこの回答を変更しますが、あなたが提供した情報から、固有の制約は問題ではありません。

また、そのテーブルにトリガーがないことを確認してください。これは、既存の行を挿入で置き換えるなどの不安定な動作を引き起こすと私が考えることができる唯一のことです。

于 2012-10-16T00:20:35.440 に答える
0

他にも何かが起こっています。SQL Server は、2 つの文字列 'MP115' と 'MP115BP' を同じ値として混同しません。私たちが確認できるように、テーブル構造をスクリプト化するように何度か依頼されました。これを行うには、SSMS を使用し、テーブルを右クリックして、[テーブルをスクリプト化] > [作成] > [クリップボード] を選択します。その結果を投稿していただければ、さらにお役に立てるかもしれません。

ただし、これは勝手な推測です。PRCatalogNumber を 5 文字に切り捨て、それ自体に別の UNIQUE INDEX を持つテーブルのコンピューター列がある可能性はありますか? それはあなたが見ている問題を引き起こすでしょう。

于 2012-10-16T02:31:50.687 に答える