Sql server 是否使用外键依赖项批量创建行?
我编写了一些用于更新单个客户的SQL语句。当这个代码被推出时,我必须更新所有的客户 现在客户ID是硬编码的,SQL语句基于该ID插入一条记录。Prototype可以工作,现在我想使用相同的算法为所有客户插入10000条记录Sql server 是否使用外键依赖项批量创建行?,sql-server,tsql,Sql Server,Tsql,我编写了一些用于更新单个客户的SQL语句。当这个代码被推出时,我必须更新所有的客户 现在客户ID是硬编码的,SQL语句基于该ID插入一条记录。Prototype可以工作,现在我想使用相同的算法为所有客户插入10000条记录 DECLARE @customerID BIGINT = 47636; DECLARE @limitFourAdjustment MONEY; DECLARE @appliesToDateTime DATETIME2(7) = SYSUTCDATETIME(); DECLA
DECLARE @customerID BIGINT = 47636;
DECLARE @limitFourAdjustment MONEY;
DECLARE @appliesToDateTime DATETIME2(7) = SYSUTCDATETIME();
DECLARE @dp_y INT = DATEPART(YEAR, @appliesToDateTime);
DECLARE @dp_m INT = DATEPART(MONTH, @appliesToDateTime);
DECLARE @dp_w INT = DATEPART(WEEK, @appliesToDateTime);
DECLARE @dp_d INT = DATEPART(DAY, @appliesToDateTime);
DECLARE @dp_h INT = DATEPART(HOUR, @appliesToDateTime);
DECLARE @d_h DATETIME2(7) = DATEADD(HOUR, DATEDIFF(HOUR, 0, @appliesToDateTime), 0);
SELECT
@limitFourAdjustment = -COALESCE(SUM(COALESCE(Amount, 0)), 0)
FROM
[dbo].Transactions
WHERE
CustomerID = @customerID AND
IsSystemVoid = 0 AND
TransactionTypeID IN (SELECT ID FROM TransactionTypes WHERE TransactionTypeGroupID = 3)
INSERT INTO dbo.CustomerAccounts_TransactionSummation (CustomerID, LimitTypeID, Y, M, W, D, H, YMDH, Amount)
VALUES (@customerID, 4, @dp_y, @dp_m, @dp_w, @dp_d, @dp_h, @d_h, @limitFourAdjustment);
我尝试添加一个while循环,似乎不是最快的解决方案。也许先收集ID,然后通过循环输入?我在下面的第一次尝试没有成功,因为我只是得到了最后一个客户ID,而不是每次都是唯一的
SELECT @numberOfCustomers = COUNT(*)
FROM dbo.Customers
WHILE(@numberOfCustomers > 0)
BEGIN
SELECT @customerID = ID FROM dbo.Customers
OTHER LOGIC FROM ABOVE
SET @numberOfCustomers = @numberOfCustomers - 1;
END
因此,问题是,如何在每个客户的ID上运行这些SQL语句(第一个代码块)?使用数据库的关键是让您的头脑围绕基于集合的操作,而不是过程性操作。数据库被设计为一次对一组数据进行自然操作,但您必须将对问题的思考方式改为一次操作整个数据集,而不是一次操作一条记录 下面是SQL,我认为它可以一次性完成您的完整更新:
INSERT INTO dbo.CustomerAccounts_TransactionSummation (CustomerID, LimitTypeID, Y, M, W, D, H, YMDH, Amount)
SELECT
id
, 4
, @dp_y
, @dp_m
, @dp_w
, @dp_d
, @dp_h
, @d_h
, -COALESCE(SUM(COALESCE(Amount, 0)), 0) limitFourAdjustment
FROM [dbo].Transactions
WHERE IsSystemVoid = 0
and TransactionTypeID IN (SELECT ID FROM TransactionTypes WHERE TransactionTypeGroupID = 3)
--and CustomerID = @customerID
请注意,插入
可以直接与选择
组合,而不是使用值