2

私がやっている:

SELECT uid, intStatus from dbo.MYTABLE 
WHERE 
intStatus = 10 and uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'

そして私は得る:

        uid                            |  intStatus 
-------------------------------------- +---------------
'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1  | 10

次に、更新を行う必要があります。その uid の intStatus を 18 にする必要があります。私もです:

UPDATE dbo.MYTABLE  SET intStatus = 18 
WHERE 
intStatus = 10 and uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'

そして、ここで私はエラーが発生しています:

一意のインデックス 'ixMYTABLE' を持つオブジェクト 'dbo.MYTABLE' に重複するキー行を挿入できません。

このエラーが発生する理由を教えてください。どうすれば解決できますか?

uid は MYTABLE の主キーです

intStatus は null でない int です

ありがとうございます!

4

3 に答える 3

0

uid が主キーである場合、それは定義上一意であるため、intStatus 条件は関係ありません。これはうまくいくはずです:

UPDATE dbo.MYTABLE  SET intStatus = 18 
WHERE  uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1';

それがうまくいかない場合は、単一の列キーではなく、両方の列を組み合わせた複合キーを使用できます。

主キーとコンポジットに関する情報

于 2013-10-10T14:37:39.540 に答える
0

おそらく、intStatus 18 と uid 'a1a1...' の行が既にあるはずです。

実行して、UPDATE で作成しようとしている行が既にあるかどうかを確認してください。

SELECT uid, 
       intStatus 
  FROM dbo.MYTABLE 
 WHERE intStatus = 18 
   AND uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'
于 2013-10-10T13:19:30.577 に答える
-1

intStatus は一意であるため、mysql はエラーをスローします。

そのクエリを実行したい場合 intStatus は一意であってはなりません

于 2013-10-10T13:25:22.647 に答える