gpt4 book ai didi

sql - 在 SQL Server 中循环记录集

转载 作者:行者123 更新时间:2023-12-03 02:48:41 24 4
gpt4 key购买 nike

我不知道如何循环行集并将其保存在变量中。

请注意,这可能是伪代码,因为 SQL 不是我的专长。

 @all_customers = select CustNum from [crrsql].[dbo].[Customer];
some loop(@all_customers as user)
//I need to find out what the Acct_balance field is and either subtract or add to bring all the balances to 0
@balance = select Acct_balance from [crrsql].[dbo].[Customer] where CustNum = user;
if @balance > 0
update [crrsql].[dbo].[Customer] set Acct_balance = 0;
INSERT INTO [crrsql].[dbo].[AR_Transactions] (cashier_ID, CustNum, Balance) VALUES (100199, user, @balance);
else
update [crrsql].[dbo].[Customer] set Acct_balance = 0;
INSERT INTO [crrsql].[dbo].[AR_Transactions] (cashier_ID, CustNum, Balance) VALUES (100199, user, "-" + @balance);
end
end loop

正如你所看到的,我正在循环访问客户,在该循环中我需要获取当前余额并将其设置为零,但首先我需要确定它是正数还是负数才能弄清楚AR_Transactions 表中每个用户的插入是否需要为正数或负数。你能帮忙补下缺失的部分吗?

最佳答案

您应该能够在几个语句中完成此操作,而无需使用游标或其他过程代码。只需确保这一切都在一笔交易中即可:

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

当然,添加适当的错误处理并确保首先对其进行测试。

此外,我稍微更改了您的一些表和列名称。我不想讨论哪些特定的命名约定比其他命名约定更好,但至少要保持一致。如果您要使用下划线,请使用它们。如果您要使用驼背表示法,请使用它,但不要混合使用它们。复数与单数表名也是如此。

关于sql - 在 SQL Server 中循环记录集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com