7
votes

Valeur de mise à jour sans curseur

J'ai une table dans la base de données.

BILLET H2>
Update Bill
Set Paid = Total,
Status = 'Paid',
Output  PAID_AMT = PAID_AMT  - (Total-Paid )
where Total-Paid  > PAID_AMT


1 commentaires

La colonne ID pourrait-elle avoir des lacunes? Il serait donc 1, 4, 5, 6, 8?


3 Réponses :


4
votes

La requête suivante montre le montant dû, en supposant que SQL Server 2012: xxx

Vous pouvez désormais distribuer le montant: xxx p> maintenant Il s'agit d'un CTE actualisé, nous pouvons donc l'utiliser dans une instruction de mise à jour: xxx


0 commentaires

3
votes

Je ne sais pas quelle version de SQL Server avez-vous, si elle 2008, vous ne pouviez pas utiliser la somme de roulement avec la fonction de fenêtre. Vous pouvez essayer cette requête récursive: xxx

sql violon Démo

pour SQL Server 2012 C'est un peu plus facile: xxx

SQL violon Démo


0 commentaires

1
votes

Si vous utilisez SQL 2012, vous pouvez utiliser ce qui suit:

--BEGIN TRAN;

--CREATE TABLE Bill
--(
--  ID Int PRIMARY KEY IDENTITY,
--  Total INT NOT NULL,
--  Paid INT NOT NULL DEFAULT(0),
--  Status AS 
--      CASE 
--          WHEN Paid = Total THEN 'Paid'
--          WHEN Paid = 0 THEN 'Unpaid'
--          ELSE 'Part Paid'
--      END
--);

--WITH KnownValues(Total, Paid) AS
--(
--  SELECT 1000, 1000
--  UNION ALL SELECT 500, 400
--  UNION ALL SELECT 700, 0
--  UNION ALL SELECT 200, 0
--)

--INSERT INTO Bill(Total, Paid)
--SELECT *
--FROM KnownValues;

--COMMIT


0 commentaires