Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ciclo su un recordset in SQL Server

Dovresti essere in grado di farlo in un paio di istruzioni senza l'uso di un cursore o altro codice procedurale. Assicurati solo che sia tutto in un'unica transazione:

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

Ovviamente, aggiungi una corretta gestione degli errori e assicurati di testarlo prima.

Inoltre, ho leggermente modificato alcuni nomi di tabelle e colonne. Non voglio entrare in quali convenzioni di denominazione specifiche siano migliori di altre, ma almeno almeno essere coerente. Se hai intenzione di usare i trattini bassi, usali. Se invece hai intenzione di usare la notazione a dorso di cammello, usa quella, ma non mescolarli. Lo stesso vale per i nomi delle tabelle plurali e singolari.