Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Schleifen über ein Recordset in SQL Server

Sie sollten dies in ein paar Anweisungen tun können, ohne einen Cursor oder anderen prozeduralen Code zu verwenden. Stellen Sie einfach sicher, dass alles in einer Transaktion erfolgt:

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

Fügen Sie natürlich die richtige Fehlerbehandlung hinzu und testen Sie dies zuerst.

Außerdem habe ich einige Ihrer Tabellen- und Spaltennamen leicht geändert. Ich möchte nicht darauf eingehen, welche spezifischen Namenskonventionen besser sind als andere, aber mindestens konsequent sein. Wenn Sie Unterstriche verwenden, verwenden Sie sie. Wenn Sie stattdessen die Camel-Back-Notation verwenden, verwenden Sie diese, aber mischen Sie sie nicht. Dasselbe gilt für Plural- und Singular-Tabellennamen.