可以重构这些查询:
BEGIN TRY
UPDATE ETAT_PERSONNE_PRECISION SET ID_PRECISION = 9 WHERE ID_PRECISION = 2
END TRY
BEGIN CATCH
DELETE FROM ETAT_PERSONNE_PRECISION WHERE ID_PRECISION = 2;
END CATCH;
BEGIN TRY
UPDATE ETAT_PERSONNE_PRECISION SET ID_PRECISION = 9 WHERE ID_PRECISION = 3
END TRY
BEGIN CATCH
DELETE FROM ETAT_PERSONNE_PRECISION WHERE ID_PRECISION = 3;
END CATCH;
BEGIN TRY
UPDATE ETAT_PERSONNE_PRECISION SET ID_PRECISION = 9 WHERE ID_PRECISION = 8
END TRY
BEGIN CATCH
DELETE FROM ETAT_PERSONNE_PRECISION WHERE ID_PRECISION = 8;
END CATCH;
BEGIN TRY
UPDATE ETAT_PERSONNE_PRECISION SET ID_PRECISION = 12 WHERE ID_PRECISION = 7
END TRY
BEGIN CATCH
DELETE FROM ETAT_PERSONNE_PRECISION WHERE ID_PRECISION = 7;
END CATCH;
的信息:
我桌上的约束键
ALTER TABLE ETAT_PERSONNE_PRECISION ADD CONSTRAINT PK_ETAT_PERSONNE_PRECISION PRIMARY KEY CLUSTERED
(
[ID_ETAT_PERSONNE] ASC,
[ID_PRECISION] ASC
)
答案 0 :(得分:0)
您可以通过执行以下操作执行单个更新:
UPDATE ETAT_PERSONNE_PRECISION
SET ID_PRECISION = (CASE WHEN ID_PRECISION = 7 THEN 12 ELSE 9 END)
WHERE ID_PRECISION IN (2, 3, 8, 7);
我不确定为什么在更新失败时会删除该行。如果更新失败,则删除可能也会失败。
答案 1 :(得分:0)
您可能需要先处理可更新的行。然后删除所有其余部分。
-- updatebale
UPDATE epp SET ID_PRECISION = 9
FROM ETAT_PERSONNE_PRECISION epp
WHERE epp.ID_PRECISION IN (2,3,8) AND NOT EXISTS (
SELECT 1
FROM ETAT_PERSONNE_PRECISION epp2
WHERE epp2.ID_PRECISION = 9 and epp2.[ID_PRECISION] = epp.ID_PRECISION]);
-- unupdatable
DELETE FROM ETAT_PERSONNE_PRECISION WHERE ID_PRECISION IN (2,3,8)
与7相同 - > 12