Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Boucle sur un jeu d'enregistrements dans SQL Server

Vous devriez pouvoir le faire en quelques instructions sans utiliser de curseur ou d'autre code procédural. Assurez-vous simplement que tout est en une seule transaction :

BEGIN TRANSACTION

INSERT INTO crrsql.dbo.AR_Transactions (
    cashier_id,
    cust_num,
    balance,
    transaction_date)
SELECT
    100199,
    cust_num,
    -acct_balance,
    DATEADD(MINUTE, -30, current_date)
FROM crrsql.dbo.Customers
WHERE acct_balance <> 0

UPDATE crrsql.dbo.Customers SET acct_balance = 0 WHERE acct_balance <> 0

COMMIT TRANSACTION

Bien sûr, ajoutez une gestion des erreurs appropriée et assurez-vous de tester cela en premier.

De plus, j'ai légèrement modifié certains de vos noms de table et de colonne. Je ne veux pas entrer dans les conventions de dénomination spécifiques qui sont meilleures que d'autres, mais au moins être cohérent. Si vous comptez utiliser des traits de soulignement, utilisez-les. Si vous allez utiliser la notation camel-back à la place, utilisez-la, mais ne les mélangez pas. Il en va de même pour les noms de table au pluriel ou au singulier.