2

SQL Serverに、PK()と他のいくつかの列によって作成された別の(論理)主キーを持つテーブルがIDあります(ただし、UNIQUE制約はありません)。たとえばPERSON、テーブル、、、、、、PK = PERSON_ID_NAMESURNAMEAGE

言うことができたらいいのに

UPDATE PERSON SET AGE = 43 WHERE NAME = 'XX' AND SURNAME = 'YYY'

'更新された行'=1の場合にのみ実行され、それ以外の場合(1行以上)は実行されません。問題は、NAMEとSURNAMEがレコードを一意に識別するかどうかわからないことであり、事前にそれを伝える方法がありません。

アイデア?

4

5 に答える 5

7

以下のクエリを試してください...それはあなたを助けるでしょう

UPDATE PERSON 
SET AGE = 43 
WHERE NAME = 'XX' 
  AND SURNAME = 'YYY' 
  AND 1 = (SELECT COUNT(*) FROM PERSON WHERE NAME = 'XX' AND SURNAME = 'YYY)
于 2013-02-01T16:11:53.523 に答える
3

where句ではなく、更新の前に条件を配置します。

IF (SELECT COUNT(*) FROM PERSON WHERE NAME = 'XX' AND SURNAME = 'YYY') = 1
UPDATE PERSON SET AGE = 43 WHERE NAME = 'XX' AND SURNAME = 'YYY'
于 2013-02-01T16:51:36.837 に答える
1

そのような何かがそれを行う必要があります。

UPDATE Person p1
SET p1.AGE = 43
WHERE NAME = 'XX' AND SURNAME = 'YY'
AND NOT EXISTS (
  SELECT NULL FROM Person p2
  WHERE p1.NAME = p2.NAME
  AND p1.SURNAME = p2.SURNAME
  GROUP BY p2.NAME, p2.SURNAME
  HAVING COUNT(*) > 1)
于 2013-02-01T16:05:44.050 に答える
1
UPDATE Person p1
SET p1.AGE = 43
WHERE NAME = 'XX' AND SURNAME = 'YY'
AND NOT EXISTS (
  SELECT NULL FROM Person p2
  WHERE p1.NAME = p2.NAME
  AND p1.SURNAME = p2.SURNAME
  AND p1.ID <> p2.ID)
于 2013-02-01T19:53:57.723 に答える